我有一个HashSet
类的奇怪行为。我不知道为什么,但是方法contains
返回错误的结果。这里是调试器的图像:
rootElemetns
是一个HashSet
,其中包含一些FsEntries
,它们由一个简单的数据类表示(没有任何附加方法,只有字段)。如您所见,传递给方法fsEntry
的{{1}}是与高亮元素相同的元素(地址@ 8939是相同的)。
为什么contains
返回contains
,但是false
是5?这是未知的Kotlin错误吗?预先感谢。
Kotlin插件的版本:1.3.40
P.S与indexOf
中的其他元素一起,我得到了正确的结果。
P.P.S。如您所见,如果我通过Set
方法转换了rootElements
,它也会返回正确的结果
答案 0 :(得分:0)
感谢致癌物质,我将给出的答案正确无误。
“如果是这种情况,则可能违反了Set的要求。在Java中,您无法更改HashMap的键(支持HashSet的键)。在Kotlin中可能类似。插入时对象,它会对其进行哈希处理,然后根据哈希将其放入插槽中。如果您随后更改该对象,则哈希将发生变化,并且在成员资格测试期间对对象进行哈希处理时,哈希将有所不同,并且使用失败。”