将其他对象分配给同一变量后对象存在
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 对象的引用,因此不会被删除。
根据对“
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 对象的引用,因此不会被删除。