我很抱歉提出这样一个基本问题,但我只是不明白如何生成此输出。如果有人有时间回答我的愚蠢问题,将不胜感激。在此先感谢您。

这是代码

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.outprintln(e2.count);
    }
}

class Echo {
    int count =0;
    void hello() {
        System.outprintln("helloo...");
    }
}


这给出了输出:

helloo...

helloo...

helloo...

helloo...

10


现在得到24个而不是10个,我们声明Echo e2 = e1;而不是Echo e2 = new Echo;
我想知道这是如何生成此特定输出的。对于10来说,我可以逐个输入值并得到答案,但是当我使它们相等时会发生什么(我无法理解)。

最佳答案

当您创建e2 = e1时,它使e1也指向同一对象。

因此,当e1e2都在递增计数时,其计数将增加两次。

当您执行Echo e2 = new Echo()Echo e1 = new Echo()时,e1和e2都指向两个不同的对象,因此增加e1的count不会对e2.count产生任何影响。

编辑:

我将添加一张图片来解释相同的内容。

关于java - 难以理解引用类型如何工作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10388455/

10-11 14:35