如果我有这样的东西
Map<String, Foo> foos;
...
Foo f = foos.get("key1");
foos.removeAll();
我还能做String s = f.getSomeProperty();
答案 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,它不仅是指针
的完整对象