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 。
答案 0 :(得分:3)
执行before = test;
时,之前只是对test
数组的引用,否已创建新数组并将其分配给test
。因此,当您查看before[i]
的值时,您基本上会查看test[i]
的值,反之亦然。 before
只是test
的别名。这就是为什么在第二次印刷中你得到65。
从 Thinking in Java 一书中查看此text,它一定会对您有帮助。
答案 1 :(得分:1)
为什么不期望这种情况发生。您只需将两个变量分配给同一个数组,然后将该数组的索引#2 指定为65,因此,下次打印时应该得到65什么是索引#2。
请参阅http://download.oracle.com/javase/tutorial/java/nutsandbolts/arrays.html
上的示例答案 2 :(得分:0)
这是正常行为。如果要复制数组,则需要复制它。
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
答案 3 :(得分:0)
对于int,你是对的,他们不互相引用。但是当你使用数组时,它们被认为是对象,所以当你执行before = test
时,在内存中它们指向同一个对象。