Введите следующий код:
class A {
Boolean b;
A easyMethod(A a){
a = null;
return a;
}
public static void main(String [] args){
A a1 = new A();
A a2 = new A();
A a3 = new A();
a3 = a1.easyMethod(a2);
a1 = null;
// Some other code
}
}
Вопрос в том, сколько объектов имеет право на сбор мусора прямо перед // Some other code
.
Тогда правильный ответ (по крайней мере, ответ интервьюера): 2 - логическое b
, потому что это обертка и a1
.
Не могли бы вы объяснить мне, почему a2
и a3
не собираются мусор?
LATER EDIT:
- Хорошо, думаю, я понял это сейчас. Сначала это было немного странно, но теперь я уверен, что интервьюер ошибся. Моя первоначальная ошибка заключалась в том, что сначала я не считал, что Java передается только по значению, поэтому невозможно сделать a2 null внутри функции, которая принимает "a2" в качестве параметра, потому что a2 на самом деле является копией a2.
- Часть с булевым b действительно была очевидна.
Спасибо за ответ, я пришлю несколько отзывов для интервью после этого:).