【发布时间】:2018-11-26 22:19:24
【问题描述】:
public static void main(String[]args) {
int[] x = {1, 2, 3, 4};
int[] y ;
y = x;
x[1] = 11;
x = new int[2];
x[0]=99;
for (int i = 0; i < y.length; i++)
System.out.print(y[i] + " ");
System.out.println("");
for (int i = 0; i < x.length; i++)
System.out.print(x[i] + " ");
}
答案是
1 11 3 4
99 0
我的问题是我认为当您分配两个数组时,它们共享相同的更改,因为它们是对象......就像我设置 x[1] = 11; 时它改变了 y 的值,所以你不应该仍然相同将其更改为 2 大小的数组后到 x,或者由于我正在更改大小,它们不再指向相同的地址?
【问题讨论】:
-
您的代码创建了 2 个数组,一个长度为 4,一个长度为 2。作为参考,我们将它们称为 A4 和 A2。所以,
x = A4, y = A4,然后x[1] = 11表示您刚刚更改了 A4。x = A2然后x[0] = 99表示您刚刚更改了 A2。 -
行 x = new int[2];确保创建一个新数组并将其分配给引用 x。而 y 仍然指的是前一个数组。
标签: java arrays pointers memory-management reference