Give the following code:
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
}
}
The question is how many objects are eligible for garbage collection right before // Some other code
.
Then correct answer is (at least that's the interviewer answer): 2 - the Boolean b
because it's a wrapper and a1
.
Can you please me explain me why a2
and a3
aren't being garbage collected ?
LATER EDIT:
- Ok, I think I get it now. It was a bit confusing at first, but now i am sure the interviewer was wrong. My initial mistake was that at first I didn't consider that Java is pass by value only, so it's impossible to make a2 null from inside a function that take "a2" as a parameter, because that a2 is actually a copy of a2.
- The part with the Boolean b was indeed quite obvious.
Thanks for an answer, I will send some interview feedback after that :).