2014-11-03 35 views
1

想象我有:是否列表明確刪除對象以前包含

List<MyObject> MyList = new List<MyObject>(); 
MyObject obj1 = new MyObject(); 
MyObject obj2 = new MyObject(); 
MyList.Add(obj1); 
MyList.Add(obj2); 

難道一個

MyList.Clear(); 

刪除實例: 'OBJ1', 'OBJ 2'?或者他們保存在內存中,但列表現在只是空的?

+1

對象仍然存在,但列表爲空。垃圾收集器(GC)一旦沒有引用它就立即刪除對象。 – MichaelS 2014-11-03 13:30:12

回答

0

只要你有一個對象的引用,你可以在你的代碼中訪問它,它在內存中並且垃圾收集器沒有收集它。所以答案是不,它們保存在內存中

你可以閱讀更多關於垃圾回收here

如果代碼是這樣

List<MyObject> MyList = new List<MyObject>(); 
MyList.Add(new MyObject()); 
MyList.Add(new MyObject()); 

然後當你打電話MyList.Clear()你沒有提到你創建MyObject太垃圾收集器會收集它們並從內存中刪除它們在它的下一次運行。 如果要清除列表後,從內存中刪除obj1obj2你應該使用

obj1 = null; 
obj2 = null; 
GC.Collect() 

但要注意迫使垃圾收集的後果。

0

clear功能只是清除列表。 obj1obj2不會是null。 你可以很容易地通過打印對象檢查:

Console.WriteLine(obj1); 
+2

我相信這是'C#'而不是java – Jonesopolis 2014-11-03 13:32:49

0

刪除實例: 'OBJ1', 'OBJ 2'?或者他們保存在內存中,但列表現在只是空的?

它們保存在內存中,直到沒有對象的引用並且GC刪除它們。在這種情況下,只有您的列表將爲空。您可以通過在調用Clear方法後嘗試訪問對象的成員來輕鬆地進行測試。