根据对“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
的听众会发生什么?
答案 0 :(得分:3)
JButton
对象由b
引用变量引用;
当你创建新对象b
正确地指向新对象时,如果没有人引用它,那么旧对象符合GC条件,但在你的情况下,{{1}仍旧引用旧版本。 1}}所以它不是垃圾收集。
当任何实时线程没有引用时,对象仅由GC收集。
答案 1 :(得分:2)
对象'新的JButton(" add")'不会成为GC,因为它仍然被你的主程序引用。
虽然变量" b"指向另一个对象,新的JButton(" add")'由面板引用的其他变量指向。
答案 2 :(得分:2)
只有当对象未被任何其他引用变量引用时,对象才有资格使用垃圾收集器。但是在这里,面板保留了对较旧的JButton对象的引用,因此不会被删除。