class Beta{}
class Alpha{
    static Beta b1;
    Beta b2;
}
public class Tester{
    public static void main(String[] args){
        Beta b1=new Beta();     Beta b2=new Beta(); 
        Alpha a1=new Alpha();   Alpha a2=new Alpha();
        a1.b1=b1;        
        a1.b2=b1;
        a1.b2=b2;
        a1=nill; b1=null; b2=nill;
        //do stuff
    }
}问题:When line 16 is reached,how many objects will be eligible for garbage collection?
求各位大大解释,晚上结贴给分

解决方案 »

  1.   

    是2个,b2,a1.这两个都好理解,因为这两个属性都是对象属性,所以,当执行a1=null,b2=null后,都变为垃圾了。可能难理解的是也执行了b1=null,那么b1为什么不是垃圾对象呢?原因是还有Alpha的类属性b1指向他,所以b1这个对象,并不是垃圾对象!
      

  2.   

    SCJP给出的答案是1,不过看了你的话后明白了b1的问题,就是不晓得b2,a1中哪个不是垃圾对象。
      

  3.   

    难道是a2隐含存在可以调用b2,所以b2不是垃圾对象,d2=null这句话完全没用的?