我不确定我是否完全理解垃圾收集器的行为,因此我基于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 个对象。到底什么是真实的?
最佳答案
I think that although
a3
never becomes null, the first object (new A()
) assigned to it should also be garbage-collected, as no references still point to it. Am I right? I think hence that the correct answer would be again 2 objects.
是的,这是完全正确的。 a3
最初指向 A
的一个实例,但是在该变量被重新分配以指向另一个实例之后,不再有任何方法可以到达原始实例,所以说原始实例有资格进行垃圾回收。
关于java - 符合垃圾回收条件的对象数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13369442/