2009-12-02 69 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是完整的对象不仅指针