public class test {
public test(){
runTest();
}
private void runTest(){
//method 1
int[] A = {1,2,3,4};
int[] B = new int[A.length];
for (int i = 0; i < A.length; i++){
B[i] = A[i]+1;
}
for (int i: A){
System.out.println(" A: " + i);
}
System.out.println("----------");
for (int i: B){
System.out.println(" B: " + i);
}
System.out.println("----------");
//method 2
int[] C = {1,2,3,4};
int[] D = C;
for (int i = 0; i <D.length; i++){
D[i]++;
}
for (int i: C){
System.out.println(" C: " + i);
}
System.out.println("----------");
for (int i: D){
System.out.println(" D: " + i);
}
System.out.println("----------");
}
public static void main(String[] args){
new test();
}
}
我在methods
之一遇到了一个问题,发现问题是创建了原始的object
临时修改,我不想发生这种情况。我只是想知道为什么会发生这种情况,我认为设置object
等于另一个只会将其指向当前位置/状态,而不是将来的更新。
换句话说,想知道为什么我使用int A
和int B
执行的操作,而不是使用int C
和int D
执行的操作。
为了使它更简单,上面两种方法有什么区别?我打算对它进行一次尝试,并在调用JVM
或reference
时int C
调用相同的int D
,因为我没有&#39;像我使用int A
int B
一样创建一个新对象。
答案 0 :(得分:1)
不同之处在于,对于A和B,B
是数组的副本,而A
是完全独立的对象。对于C和D,D
是另一个引用与C
相同的对象的数组引用。 D
继续不仅指当前位置/状态&#34;,而是指同一个对象,直到它被重新分配或超出范围。无论你对D
引用的对象做什么,都可以通过C
看到,因为它是同一个对象。