不了解Java中的Echo e2 = e1

shi*_*hin 2 java

我理解以下Java输出.

public class EchoTestDrive {
    public static void main(String[] args){
        Echo e1 = new Echo();
        Echo e2 = new Echo();
        int x = 0;
        while (x<4){
            e1.hello();
            e1.count = e1.count + 1;
            if (x==3){
                e2.count = e2.count +1;
            }
            if(x>0){
                e2.count = e2.count + e1.count;
            }
            x = x+1;
            System.out.println("e1.count is " + e1.count);
            System.out.println("e2.count is " + e2.count);
        }
        System.out.println(e2.count);
    }
}

class Echo {
    int count = 0;
    void hello (){
        System.out.println ("helloooooooo..");
    }
}
Run Code Online (Sandbox Code Playgroud)

输出

helloooooooo..
e1.count is 1
e2.count is 0
helloooooooo..
e1.count is 2
e2.count is 2
helloooooooo..
e1.count is 3
e2.count is 5
helloooooooo..
e1.count is 4
e2.count is 10
10
Run Code Online (Sandbox Code Playgroud)

但是,当我将Echo e2 = new Echo()更改为Echo e2 = e1时,我不明白为什么输出是这样的.

public class EchoTestDrive {
    public static void main(String[] args){
        Echo e1 = new Echo();
        Echo e2 = e1;
        int x = 0;
        while (x<4){
            e1.hello();
            e1.count = e1.count + 1;
            if (x==3){
                e2.count = e2.count +1;
            }
            if(x>0){
                e2.count = e2.count + e1.count;
            }
            x = x+1;
            System.out.println("e1.count is " + e1.count);
            System.out.println("e2.count is " + e2.count);
        }
        System.out.println(e2.count);
    }
}

class Echo {
    int count = 0;
    void hello (){
        System.out.println ("helloooooooo..");
    }
}
Run Code Online (Sandbox Code Playgroud)

产量

helloooooooo..
e1.count is 1
e2.count is 1
helloooooooo..
e1.count is 4
e2.count is 4
helloooooooo..
e1.count is 10
e2.count is 10
helloooooooo..
e1.count is 24
e2.count is 24
24
Run Code Online (Sandbox Code Playgroud)

对于x,当x = 0时,e1.count为1,e2.count为0.当x = 1时,e1.count为e1.count为2,e2.count为2.

我希望有人解释一下.

提前致谢.

Kyr*_*yra 5

当你有Echo e2 = e1; 你这样做,所以e1和e2都指向相同的内存位置.因此,无论何时添加到e2,它都会添加到该内存位置,因此e1具有相同的值,反之亦然.特别

当x = 0时

e1.hello();
        e1.count = e1.count + 1;   //adds 1 to the memory location
        if (x==3){  // x is 0 so doesn't go in
            e2.count = e2.count +1;
        }
        if(x>0){  // x is 0 so doesn't go in
            e2.count = e2.count + e1.count;
        }
        x = x+1;
        System.out.println("e1.count is " + e1.count);
        System.out.println("e2.count is " + e2.count);
    }
    System.out.println(e2.count);
}
Run Code Online (Sandbox Code Playgroud)

因此,存储器位置等于1,并且e1和e2都是1

当x = 1时

e1.hello();
        e1.count = e1.count + 1;   
           //adds 1 to the memory location which was already 1 from last time and now equals 2
        if (x==3){  // x is 1 so doesn't go in
            e2.count = e2.count +1;
        }
        if(x>0){  // x is 1 so goes in as 1 is greater than 0
            e2.count = e2.count + e1.count;  // adds e2 and e1 = 2 + 2 from previous line above = 4
        }
        x = x+1;
        System.out.println("e1.count is " + e1.count);
        System.out.println("e2.count is " + e2.count);
    }
    System.out.println(e2.count);
}
Run Code Online (Sandbox Code Playgroud)

因此,存储器位置等于4,并且e1和e2都是4