1. public class X ( 
2. public object m () { 
3. object o = new float (3.14F); 
4. object [] oa = new object [1]; 
5. oa[0]= o; 
6. o = null; 
7. return oa[0]; 
8. } 
9. } 
When is the float object created in line 3, eligible for garbage collection? 
A. Just after line 5 
B. Just after line 6 
C. Just after line 7 (that is, as the method returns) 
D. Never in this method. 
我觉得答案应该是B,大家说说应该选那个?

解决方案 »

  1.   

    D吧
    因为 oa[0]= o;
    所以o指向的对象new float (3.14F)的引用赋给了oa[0]
    所以,没有垃圾
      

  2.   

    object o;
    创建的o变量是在栈内存中的
    java垃圾回收的对象是堆内存
    也就是用new生成的对象o = null; 
    这句话只是让o丢失了原来指向堆内存的引用而已
    而o本身并不是垃圾回收的对象
      

  3.   

    我觉得只要有某个对象=null有意味着后面将会发生垃圾回收,只不过不能保证会立即回收!
      

  4.   

    o=null,这句话好像就是说o可以被回收了吧
      

  5.   

    某个对象=null只是说丢弃对某个对象的引用但是
    o = null; 
    之前,执行了
    oa[0]= o; 
    也就是o之前的引用给了oa[0]
    所以没有垃圾
      

  6.   

    继续讨论一下,
    如果注释掉第5行,即oa[0]=o,直接执行了o=null;此时是不是应该选择B