public class DrumKitTestDrive {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Echo e1 = new Echo();
Echo e2 = new 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.print(e2.count);
}
}
class Echo {
int count = 0;
void hello(){
System.out.println("Hellooooo....");
}
}
该代码的输出将是:
Hellooooo....
Hellooooo....
Hellooooo....
Hellooooo....
10
但如果我删除评论// e2= e1;
当我运行代码时系统将打印24代替10。我不明白为什么会这样?
我的理解是系统只会复制e1
实例化为e2
实例。如果系统这样做,结果将保持不变,因为两个对象属于同一类。
我的理解是系统只会将 e1 实例的值复制到 e2 实例中。
不,当你这样做时e2 = e1
你正在复制对象参考- 你没有复制对象 - 所以变量e1
and e2
都将指向同一个物体.
因此,当您进行增量时,它们都会增量相同的计数字段。
只是没有任务而已e2 = e1
增量发生在两个不同的实例上。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)