这段代码背后的逻辑是什么?

时间:2013-01-04 11:19:02

标签: java

我想从这个java代码中了解输出如何工作。 请帮忙! 我从一本名为Head First Java的书中获取了这段代码 这是代码:

public class EchoTestDrive {

    public static void main(String[] args) {
        Echo e1 = new Echo();
        Echo e2 = new Echo(); // the correct answer
        //or
        Echo e2 = e1; // is the bonus answer!
        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(e2.count);
    }
}

class Echo {

    int count = 0;

    void hello() {
        System.out.println("helloooo... ");
    }
}

这是输出:

  %java EchoTestDrive
   helloooo...
   helloooo...
   helloooo...
   helloooo...
   10

3 个答案:

答案 0 :(得分:2)

除了别名之外,我不知道这个问题是什么。如果你有这一行:

Echo e2 = new Echo();

然后e2是与e1分开的对象,并且有自己的count变量。如果您使用此:

Echo e2 = e1;

然后您总共有一个Echo实例,e1e2指向该实例。

其余的只是关于如何以及何时在循环中更新count变量的详细信息。

答案 1 :(得分:2)

渴求

输出4次的

helloooo...来自......

    while (x < 4) {
        e1.hello();
        x = x + 1;
    }

至于计数为10,(假设Echo e2 = e1;Echo e3 = e1; ...

迭代后x = 0:e1.count == 1,e2.count == 0;

迭代后x = 1:e1.count == 2,e2.count == 2;

迭代后x = 2:e1.count == 3,e2.count == 5;

迭代后x = 3:e1.count == 4,e2.count == 10;

虽然这种解释使e3完全未使用。

答案 2 :(得分:2)

示例就像填写源代码池中的空白一样。

你已经完成了很好,你可能想知道为什么差异发生在下面

Bonus Answer! 
24
correct Answer!
10

正确的情况

Echo e2 = new Echo(); // the correct answer 

您正在创建Echo的单独实例,因此它将拥有自己的count,并且每当您说e2.count时您正在访问此计数。

奖金回答案例

Echo e2 = e1;

您有两个引用指向同一个对象,因此当您执行e2.count时,您正在count访问e1e2