最近在看《Thinking in Java》看到 Assignment 这一段,自己还真的弄错了,贴出来,让自己加深印象
class Tank{
int level;
}
public class Assignment{
public static void main(String[] args){
Tank t1 = new Tank();
Tank t2 = new Tank();
t1.level = 9;
t2.level = 47;
System.out.println("1:t1.level:" + t1.level +
", t2.level:" +t2.level);
t1 = t2;
System.out.println("1:t1.level:" + t1.level +
", t2.level:" +t2.level);
t1.level = 27;
System.out.println("1:t1.level:" + t1.level +
", t2.level:" +t2.level);
}
}
// 结果如下:
1: t1.level: 9, t2.level: 47
2: t1.level: 47, t2.level: 47
3: t1.level: 27, t2.level: 27
我是结果3弄错了。原文解释的很清楚,
大意是:t1 和 t2 都是引用,分别指向各自的对象。当“t1 = t2”后,t1 和 t2都指向同一个对象(原来t2指向的对象),所以3会显示两个27.(原来t1指向的对象会被GC回收)