1.Object aobj = new Object ( ) ; 2.Object bobj = new Object ( ) ; 3.Object cobj = new Object ( ) ; 4.aobj = bobj; 5.aobj = cobj; 6.cobj = null; 7.aobj = null; 这段代码中,第几行的内存空间符合垃圾收集器的收集标准? 我会跟帖给出答案  请大家帮帮我,谢谢!

解决方案 »

  1.   

    答案为:第7行。 行1-3分别创建了Object类的三个对象:aobj,bobj,cobj 行4:此时对象aobj的句柄指向bobj,所以该行的执行不能使aobj符合垃圾收集器的收集标准。 行5:此时对象aobj的句柄指向cobj,所以该行的执行不能使aobj符合垃圾收集器的收集标准。 行6:此时仍没有任何一个对象符合垃圾收集器的收集标准。 行7:对象cobj符合了垃圾收集器的收集标准,因为cobj的句柄指向单一的地址空间。在第6行的时候,cobj已经被赋值为null,但由cobj同时还指向了aobj(第5行),所以此时cobj并不符合垃圾收集器的收集标准。而在第7行,aobj所指向的地址空间也被赋予了空值null,这就说明了,由cobj所指向的地址空间已经被完全地赋予了空值。所以此时cobj最终符合了垃圾收集器的收集标准。 但对于aobj和bobj,仍然无法判断其是否符合收集标准我不明白1.在第四行的时候aobj中的地址已经指向bobj应该是指向了bobj所指向的对象,原来aobj指向的对象已经没有引用变量了,在第5行的时候aobj又指向了cobj所指向的对象,这时指向cobj所对应对象的引用变量为aobj,cobj;指向bobj对应的对象的引用变量为bobj;经过6、7行后aobj和cobj已经为空。也就是说现在第一行的对象和第三行的对象没有引用变量。  
    四楼的兄弟您能说下为什么是第七行吗?