class CardBoard {
Short story = 5;
CardBoard go(CardBoard cb) {
cb = null;
return cb;
}

public static void main(String[] args){
CardBoard c1 = new CardBoard();
CardBoard c2 = new CardBoard();
CardBoard c3 = c1.go(c2);
c1=null;

// do stuff
}
}当运行到do stuff的时候 有多少对象满足垃圾回收的条件啊请教一下 答案上说是两个 一个c1 一个story我有些不解的是c3请高手解答一下 c3是否满足垃圾回收条件啊 谢谢!

解决方案 »

  1.   

    c3没有指向任何对象,一直是null啊,哪来垃圾回收?
      

  2.   

    请教高手,为啥c2不满足垃圾回收的条件?
    c1.go(c2)的时候,不是直接把引用传过去了吗?
    为什么c2不能回收呢??
      

  3.   

    c2 又没有为空,它一直和堆在的对象连接着呀。
    c1.go(c2) 是把堆上的所创建的地址给传过去了。让它们指向同一个对象。但原c2 没有为空
      

  4.   

    按我的理解:例如引用c1原来指向一个对象 后来c1=null;了 它原来指向的那个对象就成垃圾了但是c3从来就没有指向过任何的对象,又何来的垃圾回收呢...
      

  5.   

    c3只不过是个引用类型的局部变量,定义后被初始化为null,然后随main方法结束而消失.
    垃圾回收器回收的是堆上的对象.对于上面的代码
    CardBoard c1 = new CardBoard();
    CardBoard c2 = new CardBoard();
    执行到这里的时候对象有4个,两个CardBoard对象,两个Short对象
    c1指向的CarBoard对象
    c2指向的CarBoard对象
    c1.story指向的Short对象
    c2.story指向的Short对象CardBoard c3 = c1.go(c2);
    执行到这里时,方法go得到的仅仅是c2这个引用类型变量的一个copy,不会影响到c2
    所发生的事情是go方法中的cb指向了c2所指向的对象,然后cb又被赋了nullc1=null;
    执行到这里,没有引用指向原c1所指向的对象了,所以该对象被回收,c1.story消失,原c1.story所指对象也被回收