java WeakHashMap的问题

Map<String, String> map=new WeakHashMap<String, String>();

map.put(new String("mldn"), new String("www.mldn.cn"));
map.put(new String("zhinangtuan"),
new String("www.zhinangtuan.net.cn"));
map.put(new String("mldnjava"),
new String("www.mldnjava.com.cn"));

System.gc();

map.put(new String("LXH"), new String("lixinghua"));

System.out.print("内容:"+map);
//结果显示:
内容:{LXH=lixinghua}

Map<String, String> map=new WeakHashMap<String, String>();

map.put("mldn", "www.mldn.cn");
map.put("zhinangtuan", "www.zhinangtuan.net.cn");
map.put("mldnjava", "www.mldnjava.com.cn");

new String("www.mldnjava.com.cn"));*/
System.gc();
map.put("LXH", "lixinghua");
System.out.print("内容:"+map);
//结果显示:
内容:{LXH=lixinghua, mldnjava=www.mldnjava.com.cn, mldn=www.mldn.cn, zhinangtuan=www.zhinangtuan.net.cn}

我的问题是为什么没用new显示的结果就不一样了 各位大神请解释详细点 谢谢!! 本人新手

第1个回答  2013-08-12
这是由于WeakHashMap自己的特性决定的
在 WeakHashMap 中,当某个键不再正常使用时,将自动移除其条目。
更精确地说,对于一个给定的键,其映射的存在并不阻止垃圾回收器对该键的丢弃,这就使该键成为可终止的,被终止,然后被回收。
丢弃某个键时,其条目从映射中有效地移除,因此,该类的行为与其他的 Map 实现有所不同。
null 值和 null 键都被支持。该类具有与 HashMap 类相似的性能特征,并具有相同的效能参数初始容量 和加载因子。
第2个回答  2013-08-12
具体原因不清楚。我猜测是因为“xxx”形式时,会首先从字符串静态池中获取。当获取不到时。会new一个放入静态池。调用。
System.gc();是垃圾回收机制。强制回收。
如果直接new出来的话。此时没有被调用。就会被回收掉。
而静态池的话会保留下来。
希望可以帮你。个人拙见。本回答被提问者采纳
相似回答