弱引用哈希表(WeakHashMap)是如何工作的?

7

弱引用哈希表如何知道其键的引用已经过时,特别是当该键为基于字符串池的字符串时?


3
这个链接可以帮助你:https://dev59.com/M3VC5IYBdhLWcg3w4Vb6。说明:该链接讨论了在什么情况下使用WeakHashMap或WeakReference。 - jmj
2个回答

3

不要使用字符串字面值与WeakHashMap一起使用(虽然可以,但没有意义):

String myKey = "somekey";

相反,你必须使用:

String myKey = new String("somekey");

在后一种情况下,字符串不会被池化。

这些例子是相同的。字符串字面值是一个字符串。在任何字符串没有(强/正常)引用后的某个阶段,它将被垃圾回收。 - Andrew Gallasch
不完全相同:https://dev59.com/82kv5IYBdhLWcg3wdQnm - Peter Knego

1

“Obsolete”这个词不够准确。问题的条件是“垃圾回收”。当且仅当键被垃圾回收时,WeakHashMap中的值才会被移除。就是这样。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接