Вопрос из теста SCJP - PullRequest
       10

Вопрос из теста SCJP

2 голосов
/ 14 декабря 2009

Вопрос из теста 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. Что не так?

1 Ответ

5 голосов
/ 14 декабря 2009

Из поисковика я нашел эту тему .

Первый объект - это объект, на который изначально ссылался c.

A a = новый A ();
A b = новый A ();
A c = новый A () ;
a.aob = Ь;
b.aob = а;
c.aob = a.aob;
A d = новый A (). Aob = новый A ();
с = Ь ; // (1)

Получает право на (1).

Другой объект, отвечающий требованиям GC, находится в выписке

A d = новый A () .aob = новый A () ;

Здесь объект, созданный в тексте, выделенном жирным шрифтом, будет иметь право на GC. Объект, выделенный курсивом, будет присвоен d.

...