In my studying for OCJP I came across the following question:
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);
c1 = null;
// do Stuff
}}
When //doStuff is reached, how many objects are eligible for GC?
The correct answer is 2, meaning c1
and its story
object.
When line //doStuff is reached, c3 is also null. Why isn't it eligible for GC too?
c3 is a local handle with a null reference, it does not point (and hever has pointed) to an allocated object. Therefore there's nothing to GC.