我運行了以下代碼段,輸出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