解决方案 »

  1.   

    很多人都说这题错的
    new 了3个Object()对象,abc只是对象的引用
    第四行a指向了b,那么a原来指向的对象就没有引用再指向它,而且后面也没有再引用到,所以第四行应该是会回收这个原本是a指向的空置对象
      

  2.   

    符合垃圾收集器收集的是对象实体,而不是引用
    aobj,bobj,cobj是引用,在栈中,生命周期结束后其地址被回收,与垃圾收集器无关
    1,2,3那三个new Object()才是对象实体,失去所有引用的对象实体可能会被回收
    4执行后第一个Object不可能再被引用
    7执行后第三个Object不可能再被引用
    所以如果非要选答案的话应该选1和3
      

  3.   

    多谢楼上的解答,我也是觉得第一个Object对象会被回收。
      

  4.   

    在main函数中,第四个new Object()没有赋给任何对象,产生的内存没有被任何变量引用,java虚拟机的垃圾处理器不能自动清理,除非内存不够才会开始清理,只有当你将new object()赋给某个变量的时候垃圾处理器才会自动清理,当然你可以用System.gc()去手动回收垃圾!java初学者,刚看的教程上老师这么说的
      

  5.   

    是欧立奇等人“编”的那本吗?一群不懂java的人胡凑起来的,建议别看。
      

  6.   

    就是那本,书中确实有不少地方讲得不太清楚。
    讲得不清楚还算好的,最怕瞎扯淡。
    这本书里的“在Java的内存分配中,对象和实例是不同的,前者分配在内存堆里,后者分配在堆栈里” http://www.dushu.com/showbook/101617/1051958.html
    “在Java中有两个非常特殊的变量:this和super,这两个变量在使用前都是不需要声明的。this变量使用在一个成员函数的内部,指向当前对象,当前对象指的是调用当前正在执行方法的那个对象。super变量是直接指向超类的构造函数,用来引用超类中的变量和方法。因此它们都是非常有用的变量。” http://www.dushu.com/showbook/101617/1051963.html