2 回答

TA貢獻1834條經驗 獲得超8個贊
幾乎可以肯定,程序將在 GC 運行之前完成。所以......從技術上講......沒有垃圾收集。
類似地,當main
方法完成時,它創建的所有對象都將無法訪問并且有資格被垃圾收集。(即使程序沒有終止。)
但是,當您到達 print 語句時,該company
對象將是可訪問的,并且其toy
字段將是可訪問的,因此該字段的值將是可訪問的......并且ToyCar
它所引用的對象不會被垃圾收集,無論是那時 GC 還沒有運行。
一般規則是,如果您的應用程序可以訪問一個對象,它就不會被垃圾回收。基本上,不用擔心。如果您的代碼可以使用該對象,該對象仍將存在。

TA貢獻1827條經驗 獲得超4個贊
這里這三行代碼構造了三個不同的新對象ToyCar
cars[0] = new ToyCar();
cars[1] = new ToyCar();
cars[2] = new ToyCar();
執行完這兩行代碼
cars[0] = null;
cars[1] = null;
前兩個汽車對象將有資格進行垃圾收集。因為 JVM 中不存在對該對象的外部引用。
現在來到這條線
ToyShop company = new ToyShop();
company.setToyCar(cars[2]); //now car object at 2ond Index have external ref.
這里第三個對象引用被分配給toyCar作為成員變量存在的引用變量company。
因此,在執行 line 之后,cars = null;仍然存在一個外部引用JVM。
因此,只有 2 個對象在執行cars = null;.
添加回答
舉報