CacheBuilder
方法weakValues()
和softValues()
都在其javadoc中包含此行:
注意:使用此方法时,生成的缓存将使用identity(==)比较来确定值的相等性。
这究竟是如何影响行为的?据我所知,Cache
或LoadingCache
接口上没有需要测试值相等的公共方法。它会影响asMap()
视图吗?
答案 0 :(得分:0)
我猜它在内部使用Google的ConcurrentMap
并使用remove
和replace
的值比较。
答案 1 :(得分:0)
Guava 在内部缓存 soft / weak 值。如果2个弱/软值的引用相等,那么内容也必须相等。
Guava 仅比较包含(...),删除(...)或替换等方法中的值(...)并用于查找特定条目并检查它是否真的存在或删除密钥。因此,番石榴首先寻找特定的条目。如果找到则删除该条目。
我认为主要目的是检测一个条目的重复删除,因为如果引用指向的值已经 null ,那么它不是显式删除,但内部已由番石榴删除(计算)。
没什么值得担心的。这就是番石榴处理旧条目删除的方式。
没有办法改变这个,你真的不必关心这个,番石榴会处理这个:D