当主实例为null时,实例内的实例是否会被置零

时间:2015-11-08 17:08:15

标签: java null instance

假设我们有这段代码:

public class c1 {
    c2 secondclass = new c2();
}

public class c2 {
    public c2() {
        System.out.println("c2 instance created");
    }
}

如果我设置c1 = nullc2内的c1级会自动归零吗? 或者我需要:

c1.c2 = null;
c1 = null;

1 个答案:

答案 0 :(得分:2)

不,它不会。了解您从未将实例设置为null非常重要 - 您只需将变量的值设置为null即可。可以有多个变量引用同一个实例。很难对您的确切示例发表评论,因为您似乎使用类名作为变量名,但如果您有:

public class Foo {
    // Note that good code almost never has public fields; this is for demo purposes only
    public Bar bar;
}

public class Bar {
    @Override public String toString() {
        return "Message";
    }
}

然后你可以这样做:

Foo foo1 = new Foo();
Foo foo2 = foo1;
// The values of foo1 and foo2 are now the same: they are references to the same object
foo1.bar = new Bar();
System.out.println(foo2.bar); // Prints Message
foo2 = null;
System.out.println(foo2); // Prints null
System.out.println(foo1.bar); // Still prints Message

foo2的值更改为null会使没有区别于foo1 - 它不会更改foo1的值,也不会对foo1的值引用的对象产生任何影响。

一般来说,你需要非常,非常清楚关于the differences between objects, variables and references。一旦你掌握了这种心理模型,很多其他事情就会变得更容易理解。