3
回答
Java引用的小问题
利用AWS快速构建适用于生产的无服务器应用程序,免费试用12个月>>>   
Animal jerry = new Rat();
jerry = new DecorateAnimal(jerry,FlyFeature.class);
jerry = new DecorateAnimal(jerry,DigFeature.class);
jerry.doStuff();

这。。。我有点郁闷了。。我感觉jerry引用会一直指向新的对象。。。而旧的对象会怎么样呢?  。。。。。

举报
bBugyang
发帖于3年前 3回/115阅
共有3个答案 最后回答: 3年前
旧的对象被你包到新的对象里了啊
--- 共有 1 条评论 ---
bBugyangjerry = new DecorateAnimal(jerry,FlyFeature.class); 这两个jerry是不一样的吗?。就是先将jerry对象传给DecorateAnimal的构造函数以后再指向新的对象吗? 3年前 回复
旧的对象已经出等死阶段,时机一到,就要升天。
--- 共有 2 条评论 ---
纠结名字回复 @bBugyang : 就看你的构造函数里有没有对原来的对象保有引用,如果有,则一直存活;反之,则在合适的时候被回收。 3年前 回复
bBugyang可是每次new新的时候 旧的都被传入新的的构造函数里了。。。 3年前 回复

Java的内存回收机制,当强引用为0的时候,对象会被回收。jerry指向新对象的时候,如果你没有把之前的对象传入到DecorateAnimal中,它的引用为0,就会被回收。现在你把之前的对象传入,那么它的强引用依然为1,所以不会被回收。

--- 共有 1 条评论 ---
bBugyang恩,谢谢了。这么一说就明白了,其实构造函数里有个Aninal xxx 引用了以前的旧值。所以咯~就不会被回收。谢谢 3年前 回复
顶部