试图找出为什么设置一个对象等于另一个对象更新两个对象

时间:2014-05-09 17:02:16

标签: java

示例代码

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 Aint B执行的操作,而不是使用int Cint D执行的操作。

为了使它更简单,上面两种方法有什么区别?我打算对它进行一次尝试,并在调用JVMreferenceint C调用相同的int D,因为我没有&#39;像我使用int A int B一样创建一个新对象。

1 个答案:

答案 0 :(得分:1)

不同之处在于,对于A和B,B是数组的副本,而A是完全独立的对象。对于C和D,D是另一个引用与C相同的对象的数组引用。 D继续不仅指当前位置/状态&#34;,而是指同一个对象,直到它被重新分配或超出范围。无论你对D引用的对象做什么,都可以通过C看到,因为它是同一个对象。