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

Object exists after assigning other object to the same variable

根据对“”的回答,当我创建对象时:

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); 

根据上面的题目,"add" JButton对象稍后会被GC删除。在这种情况下,我添加到此 JButton 的侦听器会发生什么?

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

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

JButton对象被b引用变量引用; 当您创建新对象时 b 正确指向新对象,如果没有人引用旧对象,则旧对象有资格进行 GC,但在您的情况下,旧对象仍由 panel 所以它没有被垃圾收集。

对象仅在未被任何活动线程引用时由 GC 收集。

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