假设我们有这段代码:
public class c1 {
c2 secondclass = new c2();
}
public class c2 {
public c2() {
System.out.println("c2 instance created");
}
}
如果我设置c1 = null
,c2
内的c1
级会自动归零吗?
或者我需要:
c1.c2 = null;
c1 = null;
答案 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。一旦你掌握了这种心理模型,很多其他事情就会变得更容易理解。