我不确定我是否完全了解垃圾收集器的行为,因此我基于previous question提出了这个问题。
在这个程序中:
class A {
Boolean b;
A easyMethod(A a){
return new A();
}
public static void main(String [] args){
A a1 = new A();
A a2 = new A();
A a3 = new A();
a3 = a1.easyMethod(a2);
a1 = null;
// Some other code
}
}
有多少对象可以进行垃圾回收?我认为虽然a3
永远不会变为null,但是分配给它的第一个对象(new A()
)也应该被垃圾收集,因为没有引用仍然指向它。我对吗?我认为正确的答案将是2个对象。实际上是什么?
答案 0 :(得分:2)
我认为虽然
a3
永远不会变为空,但分配给它的第一个对象(new A()
)也应该被垃圾收集,因为没有引用仍然指向它。我对吗?我认为正确的答案将是2个对象。
是的,这是完全正确的。 a3
最初指向A
的一个实例,但在重新分配该变量以指向不同的实例之后,不再有任何方式可以到达原始实例,因此所述原始实例符合垃圾的条件集合。
答案 1 :(得分:2)
是的,你是对的。
a1 = <instance 1>
a2 = <instance 2>
a3 = <instance 3>
a3 = <instance 4> //as a returned value
a1 = null
因此不再引用instance 1
和instance 3
,因此可能会被收集。