因為o=null後面的程序沒有使用到變量o,所以最先回收。

解决方案 »

  1.   

    只有new 才分配内存,所谓的垃圾收集(garbage collection)也就是指收回这些内存,条件是这内存没有被任何其它程序代码所利用了。这道题,答案正确。
    o 先被分配了内存,是一个Float大小的内存块; oa 被分配了内存,是一个Object大小的内存块(就是oa[0]).第5行,可以把oa[0]当作指针,指向 o 代表的那个Float。现在有两个代码指向那个Float内存, o 和 oa[0].
    第6行, o 不再指向Float 内存了。
    第7行 oa[0]也不指向那个Float内存了,所以第7行后(理论上) 垃圾收集就起作用了。另外,上面代码有问题,编译肯定不通过,因为函数m()应该有返回值。
      

  2.   

    第5行oa[0]=0;这样第3行创建的对象被两个引用指向。所以只有当两个引用都指向null之后才会被gc。也就是第7行。
    你这题什么地方看到的?跟我考scjp的那道gc题很象的嘛。
      

  3.   

    我考的时候的那题和这题前面都一样,就是第7行是return (Object)oa[0];