关于不返回期望值的数组的简单代码片段
为什么此代码返回4 4而不是4 1?关于不返回期望值的数组的简单代码片段
我跟踪的新values[k]
是4至for循环,但我明白,int[]
号码被复制到原来的int[]
数值数组,所以没有int[]
号通过了环带int[]
值的变化?
这是我不知道的规则吗?
int[] values = { 1, 3, 1, 3, 1 };
int[] numbers = values;
for (int k = 0; k < values.length; k++)
{
values[k] = k * 2;
}
System.out.print(values[2]);
System.out.print(" " + numbers[2]);
因为在Java中,数组是references。基本上,values
不是数组本身,而是“引用”或“指向”一个数组的东西。引用和数组本身断开连接。
当你做numbers = values
时,你不需要创建一个值的副本,而是放入一个名为numbers的新数组,而是让数字指向值相同的值。这意味着只要你改变其中一个,你就会改变它们。有关如何制作values
的副本,请参见Make copy of array Java。
谢谢,我很感激,这真的很有帮助。 – Saksham
你得到相同的结果values[2] = 4
和numbers[2] = 4
因为你已经设置此:
int[] numbers = values;
两个数组指向相同的内存不会忽略,所以如果你在其中的一个第二个会改变也改变了。
想了解更多,您可以打印两个数组:
System.out.println(values);
System.out.println(numbers);
你会得到相同的参考:
[[email protected]
[[email protected]
谢谢!我现在知道了。 – Saksham
因为int[] numbers = values;
不拷贝阵列values
(只是相同的参考分配给numbers
)。您可以使用Arrays.copyOf(int[], int)
,如
int[] numbers = Arrays.copyOf(values, values.length);
您的预期行为。
在发布到stackoverflow之前,请先调试您的代码。如果你最终停止了你的赛果,你应该看到两个数组是平等的。 – betontalpfa