Вопрос из теста 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();
      } 
  }

Вопрос: после выполнения c.aob=null, сколько объектов подлежат сборке мусора.

Думаю, что 1, но правильный ответ 2. Что не так?


person user231195    schedule 14.12.2009    source источник
comment
@slead - вы найдете панель предварительного просмотра весьма полезной при редактировании и публикации вопросов!   -  person David M    schedule 14.12.2009
comment
Я обновил вопрос, чтобы фактически включить вопрос (найденный в Google).   -  person Mark Byers    schedule 14.12.2009
comment
Гадости, эти вопросы - отстой. Я думал, что вся идея «продвинутого» языка с автоматической сборкой мусора заключается в том, что мне больше не нужно заботиться об этом дерьме. Может, я снова переключусь на «С», по крайней мере, я знал, что мне нужно заботиться о том, когда все будет хорошо.   -  person KevinDTimm    schedule 14.12.2009
comment
Этот вопрос касается понимания того, что делает d = new A (). Aob = new A (), а не понимания деталей сборки мусора (вам просто нужно знать, как работает сборка мусора).   -  person Adriaan Koster    schedule 14.12.2009
comment
@kevindtimm, подумайте о переходе на такой функциональный язык, как Haskell.   -  person Thorbjørn Ravn Andersen    schedule 14.12.2009
comment
@ Thorbjørn - и побороться за эту работу? ;)   -  person KevinDTimm    schedule 15.12.2009


Ответы (1)


В Google я нашел эту ветку.

Первый объект - это объект, на который изначально ссылается 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).

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

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

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

person Mark Byers    schedule 14.12.2009
comment
Я согласен! В общем, объекты, которые имеют право на сборку мусора, не могут быть достигнуты по какой-либо ссылке. В более сложных сценариях они являются островами, если на них имеются взаимные ссылки, на которые не ссылаются другие объекты за пределами этого острова. - person Markos Fragkakis; 06.02.2010