2

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。怎么了?

4

1 回答 1

5

从谷歌搜索我找到了这个线程

第一个对象是最初由 c 引用的对象。

A a= 新 A();
A b= 新 A();
A c=新 A() ;
a.aob=b;
b.aob=a;
c.aob=a.aob;
A d=新A().aob=新A();
c=b ; //(1)

它在 (1) 处符合条件。

另一个符合 GC 条件的对象是 at 语句

A d=新 A() .aob=新 A() ;

在这里,在粗体文本中创建的对象将符合 GC 条件。斜体文本中的对象将分配给 d。

于 2009-12-14T12:02:35.477 回答