来自SCJP测试的问题

use*_*195 2 java scjp

来自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();
      } 
  }
Run Code Online (Sandbox Code Playgroud)

问题:c.aob=null执行后,有多少对象符合垃圾回收的条件.

我认为1,但正确答案2.出了什么问题?

Mar*_*ers 5

从谷歌搜索我发现了这个帖子.

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

A =新A();
A b =新A();
A c = new 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.