I am working on the OCA Java certification and unsure of how to understand the answer to one question.
public class Test {
public static void main(String[] args){
Student s1 = new Student("o1");
Student s2 = new Student("o2");
Student s3 = new Student("o3");
s1=s3;
s3=s2;
s2=null;
//HERE
}
}
The question is which object will be available for garbage collection after the //HERE point.
The answer provided by the online test is : One object (o1).
Can someone explain me why?
Consider a simple class Student.
Step 1 :
Student s1 = new Student("s1");
Student s2 = new Student("s2");
Student s3 = new Student("s3");
s1, s2, s3 are referencing 3 object in the heap space
Step 2 :
Student s1 = s3;
s1 is now referencing the s3 object in the heap space
the object s1 in the heap space has lost his reference
Step 3 :
Student s1 = s3;
Student s3 = s2;
Variable s1 reference s3 heap space
Variable s3 reference s2 heap space
Step 4 :
Student s1 = s3;
Student s3 = s2;
Student s2 = null;
Variable s1 reference s3 heap space
Variable s3 reference s2 heap space
Variable s2 lost his reference (null pointer)
Conclusion :
After line 11, one object is eligible for garbage collection