代码如下:
public class Demo {
Short story = 5;Demo go(Demo demo) { demo = null; return demo; } public static void main(String[] args) { Demo demo1 = new Demo(); Demo demo2 = new Demo(); Demo demo3 = demo1.go(demo2); demo1 = null; //do stuff }
}
它自然是随着demo1回收一起回收,
它是demo1的成员变量
[code="java"]
public class Demo {
Short story = 5;
Demo go(Demo demo) {
demo = null;
return demo;
}
public static void main(String[] args) {
Demo demo1 = new Demo();
Demo demo2 = new Demo();
Demo demo3 = demo1.go(demo2);
//这里只是把demo2引用的拷贝传到go方法,所以demo2并不会被变为null,返回null,则demo3 = null;
demo1 = null;//这里又把demo1变为null
//do stuff
//这个地方就只有Demo demo1 = new Demo();这个对象会被回收,
}
}
[/code]
demo1 ,demo3
当程序运行到//do stuff时,
demo1 = null
demo2为原来创建的对象
demo3 = null
main方法中只创建了两个对象,
Demo demo1 = new Demo();
Demo demo2 = new Demo();
所以只有demo1 被回收的可能
[code="java"]
public class Demo {
Short story = 5;
Demo go(Demo demo) {
demo = null;
return demo;
}
public static void main(String[] args) {
Demo demo1 = new Demo();
Demo demo2 = new Demo();
Demo demo3 = demo1.go(demo2);
demo1 = null;
//do stuff
System.out.println(demo1);
System.out.println(demo2);
System.out.println(demo3);
}
}
[/code]
结果如下:
null
Demo@7d772e
null
自然是回收 Demo1 和 Demo3 .
原因如下:
对象做参数,传过去的是地址。
所以你在你调用的方法里面可以修改对象的某些属性(值),基本数据类型就不可以。Java中数组也是传递地址的。
因此我们如果在某些地方调用其他方法时,需要用传进去的参数把结果带回来,就可以用对象或者数组做参数,但用基本数据类型,就不能把结果带回来 .
2个 :D :D :D :D :D
LZ的意思是由几个可以回收的对象.成员变量自然也是对象.符合条件的就要算上.LZ应该是这个意思吧.
那到底有几个Short对象符合回收条件呢?
Demo1.Short自然符合. Demo2.Short自然不符合.
Demo3.Short好像就没有被创建过,自然不能作数.
结果应该是Demo1,Demo1.Short,Demo3.是这样的吧.(有点顺手推舟的味道 :wink: )
多看看对像引用吧,上面几个楼上的原因说得很清楚了,看看这个吧,有可能对你的理解有帮助:
http://www.sunxin.org/article/410.html