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 :).
Assuming
gois supposed to beeasyMethodit works like thisTwo objects are eligible for garbage collection (a1 and a3).
bis not because it’s only a reference to null. NoBooleanwas ever made.To get around the inane subtleties of what
// Some other codemight be, I instead posit the question be reworded into the following:Prdict and explain the following output:
And output:
And the followup is that at that point, a1 and a3 were eligible for GC, and a2 was not.
The lesson from this question is that “Passing an object reference to a method and setting that reference to null does not cause the original reference to be nulled”. That’s the piece of knowledge the interviewer was attempting to test.