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是否满足垃圾回收条件啊 谢谢!
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是否满足垃圾回收条件啊 谢谢!
c1.go(c2)的时候,不是直接把引用传过去了吗?
为什么c2不能回收呢??
c1.go(c2) 是把堆上的所创建的地址给传过去了。让它们指向同一个对象。但原c2 没有为空
垃圾回收器回收的是堆上的对象.对于上面的代码
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所指对象也被回收