java新手问题

时间:2009-12-02 15:08:24

标签: java

如果我有这样的东西

Map<String, Foo> foos;
...

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

我还能做String s = f.getSomeProperty();

吗?

5 个答案:

答案 0 :(得分:11)

foos仅包含对象的引用,而不是完整对象。如果从foos获得某些内容,则可以引用该对象,并可以对其进行修改。如果从foos中删除所有元素,则它不再包含任何引用,并且只有在没有对该对象的其他引用时才能对这些对象进行垃圾回收。

答案 1 :(得分:6)

是的,你是。您刚刚清除了地图,但局部变量f仍保留对Foo的有效引用,您仍然可以使用它。

答案 2 :(得分:1)

请注意,String(注意大写字母S)是表示字符串的Java类的名称。但是,是的,你是。

答案 3 :(得分:1)

简单的答案是肯定的。 f包含对foos.Get("key1")返回的对象的引用(假设它为非null)。当您从foos中删除所有内容时,您只需删除foos对象中的引用 - 您实际上并未销毁foos过去包含的数据。

答案 4 :(得分:1)

是f是Foo对象,如果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,它不仅是指针

的完整对象