10. public Object m() { 
11. Object o = new Float(3.14F); 
12. Object [] oa = new Object[1]; 
13. oa[0] = o; 
14. o = null; 
15. return oa[0]; 
16. } 
When is the Float object, created in line 11, eligible for garbage collection? 
 
A.  Just after line 13. 
B.  Just after line 14. 
C.  Never in this method. 
D.  Just after line 15 (that is, as the method returns).这道题答案是B,但我觉得明明是C啊,各位有什么高见。

解决方案 »

  1.   

    14. o = null; //这句话就是o指向了空 gc可以来回收了 所以line 14之后就o就可以被回收了选B  我觉得这里的Float object就是指Object o吧
      

  2.   


    非也!在13行中,Float对象的引用已经给了oa[0]
    所以,即便14行中 o 不再引用Float对象,Float对象也不会被回收所以,选C了
      

  3.   

    Float 对象的引用从之前的o 交给oa[0],
    当o=null之后 回收的应该是o 而不是Float 对象。这是我的理解,问题是问的Float 而不是o的回收 ,那就选C了。
      

  4.   

    TO:楼上的朋友垃圾回收只是在堆内存中进行Object o;是个变量,放在栈内存的,不属于回收的范围
      

  5.   

    题意中的Float Object指的是o对象,
    14行以后,o对象指向了null,这个时候o就要被回收了
      

  6.   

    变量也分值类型和引用类型的,o是Object类的实例,是引用类型,是放在堆里面的
      

  7.   


    真是好玩
    那你说
    Object obj;
    这个obj放哪里啊
      

  8.   

    此题的关键在于题意中的float object指的是什么。
    Object o = Float(3.14F);
    这句话实际上有三个过程,一个是创建一个Float类型的变量,是值类型的,放在栈中;然后又对这个变量进行了封装,产生了一个放在堆中的Object类的实例;最后使指针(姑且这么叫)指向这个Object类的实例。
    如果题意指的是Float(3.14F)创建的放在栈里的变量,那就选C
    如果题意指的是指针o,那么由于在14行中将它指向了null,所以选B
      

  9.   


    Object obj和Object o有什么区别吗,是引用类型,放在堆里的啊
      

  10.   

    那 只是 Object obj;
    这样产生对象了吗?
      

  11.   

    Object obj产生的是一个“指针”,指针是放在栈里的,他的值是堆里的某个对象的地址
    是我没有说清楚这一点
      

  12.   

    既然没产生对象,怎莫能说Object obj和Object o有什么区别吗,是引用类型,放在堆里的啊唉,你好好看看java吧
      

  13.   

    我没有仔细看你上面那个问题
    但楼主的问题是没有错的啊
    看java做什么
    翻翻c#的书不就完了
      

  14.   

    这个不用吵,题目是:
    When is the Float object, created in line 11, eligible for garbage collection是指11行创建的那个Float对象,当然不是指变量o,o是一个引用,不是对象本身。
      

  15.   

    我觉得是C,因为这个回收的只是o这个元素并没有回收Object数组!
      

  16.   

    应该选c吧,那个Floatc对象仍然被数组所使用,这些scjp的题好像有很多答案是错的,不知怎么搞的呀。
      

  17.   

    lz 可以参照这个帖子
    http://topic.csdn.net/u/20081118/16/f2009fac-4ff7-47e8-87e4-5969522e10ce.html
      

  18.   

    题目问的是new Float(3.14F)这个对象,而不是new Object[1],所以是B
      

  19.   

    在下愚昧,不知题目如何翻译?
    翻译成:
    在第11行创建的Float类型对象,什么时候可以被垃圾回收。
    这样不知道对不对?
      

  20.   

    其实呢,Object o 说是引用类型,一般是对的。
    但是看好后面
    o=new Float(3.14F); 
    这时候Object被封装成了FLoat类型了。
    现在还是引用吗?
    这个时候就是值传递类型了。也就是说,现在o你可以看成是Float类的封装类型了。
    既然不是地址了,那么当o=null的时候,它不被回收吗?