我想从这个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
答案 0 :(得分:2)
除了别名之外,我不知道这个问题是什么。如果你有这一行:
Echo e2 = new Echo();
然后e2
是与e1
分开的对象,并且有自己的count
变量。如果您使用此:
Echo e2 = e1;
然后您总共有一个Echo
实例,e1
和e2
指向该实例。
其余的只是关于如何以及何时在循环中更新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
访问e1
和e2