2

很抱歉问了这样一个基本问题,但我无法理解这个输出是如何产生的。如果有人有时间回答我的愚蠢问题,将不胜感激。提前致谢。

这是代码

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,我可以从字面上将值放入每个值并得到答案,但是当我使它们相等时会发生什么(我无法理解)。

4

2 回答 2

11

当你 makee2 = e1时,它​​使 e1 也指向同一个对象。

因此 count 增加了两次,e1并且e2正在增加它。

当您这样做Echo e2 = new Echo()并且Echo e1 = new Echo()e1 和 e2 都指向两个不同的对象时,因此counte1 的递增不会对e2.count.

编辑:

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

在此处输入图像描述

于 2012-04-30T18:13:52.753 回答
2

当您使用关键字“new”时,您会创建一个新对象。

例如,以下创建不同的对象

Echo e1= new Echo();
Echo e2 new Echo();

并且两个对象是相互独立的,

但是,如果你这样做

Echo e1= new Echo();
Echo e2= e1;

e1 和 e2 都引用同一个对象,您对 e2 所做的每个操作也会影响 e1,反之亦然,因为它们指向同一个 new Echo()。

但是,请考虑以下事项:

Echo e1= new Echo();
Echo e2= e1;
e2 = new Echo();

这会破坏 e1 吗?答案是不。e2 停止引用 e1 而是引用一个新对象(因此是关键字)。

也许这不能直接回答您的问题,但应该澄清几点。

于 2012-04-30T18:21:21.357 回答