为什么这段代码会返回4 4而不是4 1?
我通过for循环跟踪新values[k]
为4,但我知道int[]
数字已复制到原始int[]
值数组,{{1数字通过for循环改变WITH int[]
值?
这是我不知道的规则吗?
int[]
答案 0 :(得分:0)
您得到相同的结果values[2] = 4
和numbers[2] = 4
因为您已经设置了这个结果:
int[] numbers = values;
这两个数组指向相同的内存地址,因此如果您更改其中一个,则第二个也将更改。
要了解更多信息,您可以打印两个阵列:
System.out.println(values);
System.out.println(numbers);
你会得到相同的参考:
[I@4aa298b7
[I@4aa298b7
答案 1 :(得分:0)
因为在Java中,数组是references。基本上,values
不是数组本身,而是“引用”或“指向”数组的东西。引用和数组本身是断开连接的。
执行numbers = values
时,不创建值的副本并放入一个名为numbers的新数组,而是让数字指向值指向的相同内容。这意味着无论何时更改其中一个,您都将更改它们。有关如何制作values
的副本,请参见Make copy of array Java。
答案 2 :(得分:0)
因为int[] numbers = values;
没有复制数组values
(只是为numbers
分配相同的引用)。您可以使用Arrays.copyOf(int[], int)
之类的
int[] numbers = Arrays.copyOf(values, values.length);
表示您的预期行为。
答案 3 :(得分:0)
由于数组不是基本类型,因此在为另一个数组分配数组变量时,将复制引用。请参阅this answer以了解详情。
在您的情况下,数字变量指向与值相同的内存位置。因此答案是4 4。