我刚刚开始学习Java并且不了解这个问题。在下面的代码中,执行最后3行后有多少个对象会活着?
public class Demo {
Demo obj;
void show() {
System.out.println("Hello this is show method.");
}
public static void main(String args[]) {
Demo obj1 = new Demo();
Demo obj2 = new Demo();
Demo obj3 = new Demo();
Demo obj4 = new Demo();
obj1.obj = obj2;
obj2.obj = obj3;
obj3.obj = obj4;
obj4.obj = obj1;
obj1 = null;
obj2 = null;
obj3 = null;
}
}
答案 0 :(得分:0)
如果通过" alive"你的意思是"没有资格进行垃圾收集",所有4个对象将是" alive"在最后一行执行之后。
obj4
仍会包含对最后创建的Demo
实例(Demo obj4 = new Demo()
)的引用。该实例将保留对第一个Demo
实例的引用(由于obj4.obj = obj1;
),该实例将保留对第二个Demo
实例的引用(由于obj1.obj = obj2;
),将保留对第3个Demo
实例的引用(由于obj2.obj = obj3;
)。
因此,所有4个对象仍然具有引用,并且在执行最后3个语句后不能进行垃圾回收。