说我有一个2D数组:
int[][] foo = new int[3][10];
我想为每个1D数组提供更好的别名,例如:
int[] xAxis = foo[0];
int[] yAxis = foo[1];
int[] zAxis = foo[2];
xAxis
是否是2D阵列中第一个1D数组的引用?因为我不想再次复制数组。如果没有,我如何获得对1D阵列的引用。
答案 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]);
}
是的,它的确引用了它。