将数组分配给新变量,更改原始更改新的变量

int[] test = {0,1,2,3,4,5}; int[] before = test; System.out.println(before[2]); test[2] = 65; System.out.println(before[2]); 

第一个System.out打印2 ,它应该,但第二个打印65 。 我用这种语言编程了一年多,据我所知,这不应该发生! 有帮助吗?

  int first = 9; int second = first; System.out.println(second); first = 10; System.out.println(second); 

上面的代码在两行上打印9

当你做before = test; ,之前只是对test数组的引用, 没有创建新数组并分配给test 。 因此,当你看到before[i]的值时,你基本上看看test[i]的值,反之亦然。 before只是test的别名。 这就是为什么在第二次印刷中你得到65。

Thinking in Java书中查看此文本,它肯定会对您有所帮助。

你为什么不期望这种情况发生。 您只是两个变量分配给同一个数组,然后您将该数组的索引#2指定为65,因此,下次打印索引#2时应该得到65。

请参阅http://download.oracle.com/javase/tutorial/java/nutsandbolts/arrays.html上的示例

这是正常行为。 如果要复制数组,则需要复制它。

 class ArrayCopyDemo { public static void main(String[] args) { char[] copyFrom = { 'd', 'e', 'c', 'a', 'f', 'f', 'e', 'i', 'n', 'a', 't', 'e', 'd' }; char[] copyTo = new char[7]; System.arraycopy(copyFrom, 2, copyTo, 0, 7); System.out.println(new String(copyTo)); } } 

通过http://download.oracle.com/javase/tutorial/java/nutsandbolts/arrays.html

对于int,你是对的,他们不互相引用。 但是当你使用数组时,它们被认为是对象,所以当你执行before = test ,在内存中它们指向同一个对象。