我运行了以下代码段,输出Hey David
。封闭实例无效时的封闭类型行为
public class Test {
public String name;
public Test(String name) {
this.name = name;
}
public class A {
public String toString() {
return "Hey " + name;
}
}
public static void main(String[] args) {
Test test = new Test("David");
A a = test.new A();
test = null;
System.out.println(a);
}
}
我还测试了打印a
之前调用System.gc()
,但我不知道它实际上立刻触发一个完整的GC,所以可能是不相关的。说实话,在运行代码之前,我不知道应该发生什么,因为对于我来说,实际行为对于我来说似乎是合理的,因为name
被附加到一个无效的实例。
你能解释一下为什么我们观察到这种封闭类型的工作实例吗?
如果Java GC与.NET GC类似:将它设置为null将不会因为对象生存期表而对GC产生影响。 'System.gc()'不保证执行GC。你在这里所做的只是将变量指向'null',但由于你不碰'a',所以它不会“移除”对象本身。 – 2014-09-24 16:18:58