来自SCJP测试的问题:
class A{
A aob;
public static void main(String args[]){
A a=new A();
A b=new A();
A c=new A();
a.aob=b;
b.aob=a;
c.aob=a.aob;
A d=new A().aob=new A();
c=b;
c.aob=null;
System.gc();
}
}
问题:执行
c.aob=null
之后,有多少对象可以进行垃圾回收。我认为1,但答案正确2。怎么了?
最佳答案
在谷歌搜索中,我找到了this thread。
第一个对象是c最初引用的对象。
A a = new A();
a b =新的A();
a c =新的A();
a.aob = b;
b.aob = a;
c.aob = a.aob;
A d = new A()。aob = new A();
c = b; //(1)
它符合(1)的资格。
符合GC条件的另一个对象在语句中
A d = new A()。aob = new A();
在这里,以粗体显示的对象将可以使用GC。斜体文本中的对象将分配给d。