class CardBoard {
Short story = 200;
CardBoard go(CardBoard cb) {
cb = null;
return cb;
}
public static void main(String[] args) {
CardBoard c1 = new CardBoard();
CardBoard c2 = new CardBoard();
CardBoard c3 = c1.go(c2);
System.out.println("c3 value : "+c3);
c1 = null;
System.out.println("c1 value : "+c1);
System.out.println("c2 value : "+c2);
// do Stuff
}
}
Это пример экзамена SCJP6 mock. В этом вопросе говорится: когда достигается // doStuff, сколько объектов имеет право на GC? И ответ (2 объекта), потому что: только один объект CardBoard (c1) имеет право, но имеет связанный с ним объект-обертку Short , который также имеет право на участие.Какие объекты имеют право на GC?
Когда я выполняю код, похоже, что c3 также указывает на null ... поэтому я бы сказал, что 3 объекта имеют право на GC.
Может кто-нибудь, пожалуйста, проведет меня через логику этого кода.
или, если сказать, очень просто: в этом коде есть только два случая ключевого слова 'new', и они выполняются только один раз (они ' re в основном методе, а не в итерации) .Так по определению этот код создает только два объекта.Как он мог когда-либо собирать больше? –
@Joeri, без сомнения, вы правы. Но нелегко вывести число объектов, подходящих для сбора, в зависимости от количества созданных объектов. Да, это хороший показатель, но более важно учитывать ссылки, и очень просто ошибиться там, просто прочитав код. –
Конечно, Я полностью согласен. Именно в этом случае код настолько предельно прост, вам даже не нужно смотреть дальше. Тем не менее, хорошее упражнение. –