来自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。

10-08 17:14