Java 最后一个变量指向一个实例。实例是否可以变为空?

Java 最后一个变量指向一个实例。实例是否可以变为空?,java,Java,最后一个变量指向一个实例。我想看看如果我将对象的引用更改为null会发生什么。我很惊讶,没有例外,也没有空打印出来。这就好像代码a的行=null;已经被忽略了 输出: 我的名字?哈哈 你改变了a的意思,当然。但是myFoo仍然引用了一个实例 没有例外,因为最终变量myFoo仍然引用InnerFoohaha,即使引用a指向null。例如:首先变量a引用InnerFoohaha。然后,变量myFoo使用引用“a”引用同一实例InnerFoo'haha。当引用“a”指定null时;myFoo仍然是对I

最后一个变量指向一个实例。我想看看如果我将对象的引用更改为null会发生什么。我很惊讶,没有例外,也没有空打印出来。这就好像代码a的行=null;已经被忽略了

输出:

我的名字?哈哈


你改变了a的意思,当然。但是myFoo仍然引用了一个实例

没有例外,因为最终变量myFoo仍然引用InnerFoohaha,即使引用a指向null。例如:首先变量a引用InnerFoohaha。然后,变量myFoo使用引用“a”引用同一实例InnerFoo'haha。当引用“a”指定null时;myFoo仍然是对InnerFoo'haha'的引用。请研究对象引用是如何工作的。

您没有更改myFoo引用的内容,您只更改了a引用的内容。既然你在那之后没有提到a,那就没有效果了。这和期末考试无关。对象a=新对象;对象b=a;a=零;System.out.printlnb==null;。
public class TryJava {
    class InnerFoo {
        public InnerFoo(String name) {
            super();
            this.myName = name;
        }
        String myName;      
        boolean isStarted;
    }
    InnerFoo a = new InnerFoo("haha");
    final InnerFoo myFoo = a;
    void bar() {
        a = null; // IGNORED???
        System.out.println("myFoo.name? " + (myFoo != null ? myFoo.myName : " is null "));
    }
    public static void main(String[] args) {
        TryJava tj = new TryJava();
        tj.bar();
    }

}