2009-12-02 70 views
1

,如果我有這樣的事情java的新手問題

Map<String, Foo> foos; 
... 

Foo f = foos.get("key1"); 
foos.removeAll(); 

我仍然能夠做到String s = f.getSomeProperty();

+3

當您嘗試時會發生什麼? – AutomatedTester 2009-12-02 15:11:09

+3

請注意,按照Java約定,類以大寫字符開頭,而方法以較低的駱駝大小寫。由於Java是區分大小寫的,因此您需要正確使用它們;你的代碼片段中的三行都不會編譯,因此... – 2009-12-02 15:13:29

回答

11

foos僅保留對象的引用,而不是全部對象。如果您從foos獲得某些內容,則可以獲得該對象的引用,並且可以對其進行修改。如果您從foos中刪除所有元素,則它不再保留任何引用,只有在沒有其他引用時纔可以垃圾收集這些對象。

6

是的,你是。您只是清除了地圖,但本地變量f仍然對Foo有效,您仍然可以使用它。

1

請注意,String(注意大寫字母S)是表示字符串的Java類的名稱。但是,是的,是的。

1

簡單的答案是肯定的。 f包含對foos.Get("key1")返回的對象的引用(假設它非空)。當您從foos中刪除全部內容時,只需刪除foos對象中的引用即可 - 實際上並未銷燬foos用於包含的數據。

1

是f是Foo對象,如果美孚具有一定的屬性,是字符串中使用它
代碼:

Map<String, Integer> mp = new HashMap<String, Integer>(); 
mp.put("key1", 48); 
mp.put("key2", 50); 
mp.put("key3", 52); 
mp.put("key4", 54); 
mp.put("key5", 56); 
mp.put("key6", 58); 
Integer mytemp = mp.get("key1"); 
mp.clear(); 
System.out.println(mytemp); 

日期:

48 

即見MYTEMP是你的f是完整的對象不僅指針