将数组分配给新变量,更改原始更改新的变量
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
,在内存中它们指向同一个对象。