有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java重新分配对象引用变量是否会杀死旧对象?

如果我有一个类CatFrame,它扩展了JFrame,那么我设置myCat = new CatFrame();,然后稍后我设置myCat = new CatFrame(false);。旧CatFrame是否有资格进行垃圾收集

public class CatFrame extends JFrame{
    public CatFrame(){
         this.setVisible(false);
    }

public CatFrame(boolean b){
         this.setVisible(false);
    }
}

共 (2) 个答案

  1. # 1 楼答案

    您需要小心使用扩展窗口的Swing组件,如JFrame和JDialog,因为它们具有不会被垃圾收集的对等组件。要正确gc窗口,请使用窗口。处置()

    但除此之外,一旦堆上的对象无法从任何活动线程访问,该对象就有资格进行垃圾收集

  2. # 2 楼答案

    对。您正在将“旧”CatFrame替换为“新”CatFrame,从而允许垃圾收集器收集“旧”CatFrame,因为您的程序不再以任何方式访问它(如果这是唯一的引用)

    编辑:

    不过,JFrames和其他类似的对象有点棘手。参见ControlAltDel的回答