Java如何从2D数组中获取1D数组引用

时间:2015-07-24 06:41:04

标签: java arrays reference

说我有一个2D数组:

int[][] foo = new int[3][10];

我想为每个1D数组提供更好的别名,例如:

int[] xAxis = foo[0];
int[] yAxis = foo[1];
int[] zAxis = foo[2];

xAxis是否是2D阵列中第一个1D数组的引用?因为我不想再次复制数组。如果没有,我如何获得对1D阵列的引用。

5 个答案:

答案 0 :(得分:2)

http://www.functionx.com/java/Lesson22.htm

  

...使用一维数组时,传递多维数据   数组作为参数,数组被视为引用。这样做   该方法可以修改数组并将其更改为

宣布此

new int[3][10]

你有一个具有3个值的对象数组:array1,array2,array3。所有数组都将共享相同的定义大小(10)

所以,是的!在这种情况下,foo[0] -> array1[10]foo[1] -> array2[10]foo[2] -> array3[10]

考虑一下:如果foo[0]未指向另一个数组,您的期望是什么? (foo[x])[y]应如何运作?

答案 1 :(得分:1)

是的,它引用了第二阵列中的第一个数组。您可以通过修改xAxis数组自行验证它,并检查是否反映在2D阵列的第一个1D数组中。

答案 2 :(得分:1)

简短回答 - 是的。语句int[] xAxis = foo[0];foo[0]中的1D数组分配给变量xAxis。由于Java中的数组是对象,因此只需指定引用。数据不会再次被复制。

答案 3 :(得分:1)

是的,数组不是基本类型,而是引用类型。

因此,在您的情况下xAxis将引用foo[0]。这意味着更改将在foo[0]xAxis中显示。

但是你需要将你的第一个陈述改为,

int[][] foo = new int[3][10];

答案 4 :(得分:0)

我刚尝试了这段代码。

    int[][] foo = {
        {1, 2, 3},
        {4, 5, 6},
        {7, 8, 9}
    };

    int[] xAxis = foo[0];
    int[] yAxis = foo[1];
    int[] zAxis = foo[2];

    for(int i=0;i<3;i++){
        for(int j=0;j<3;j++){
            foo[i][j]++;
        }
    }

    for(int i=0;i<3;i++){
        System.out.println("X: " + xAxis[i] + " Y: " + yAxis[i] + " Z: " + zAxis[i]);
    }

是的,它的确引用了它。