将其他对象分配给同一变量后,对象存在

时间:2015-10-30 07:12:33

标签: java swing garbage-collection

根据对“existence of an object, and what will happen in this case”的回答,当我创建一个对象时:

Person p = new Person("Andrea") 

......后来我创建了:

p= new Person("Sam") 

...... Person“Andrea”将被垃圾收集。

那么,当我想向JPanel添加2个按钮时,为什么我可以这样做呢?

Jbutton b = new Jbutton("add");
panel.add(b);
b = new Jbutton("ok");
panel.add(b); 

根据上述主题,GC将稍后删除“添加”JButton对象。在这种情况下,我添加到此JButton的听众会发生什么?

3 个答案:

答案 0 :(得分:3)

JButton对象由b引用变量引用; 当你创建新对象b正确地指向新对象时,如果没有人引用它,那么旧对象符合GC条件,但在你的情况下,{{1}仍旧引用旧版本。 1}}所以它不是垃圾收集。

当任何实时线程没有引用时,对象仅由GC收集。

答案 1 :(得分:2)

对象'新的JButton(" add")'不会成为GC,因为它仍然被你的主程序引用。

虽然变量" b"指向另一个对象,新的JButton(" add")'由面板引用的其他变量指向。

答案 2 :(得分:2)

只有当对象未被任何其他引用变量引用时,对象才有资格使用垃圾收集器。但是在这里,面板保留了对较旧的JButton对象的引用,因此不会被删除。