【发布时间】:2013-07-05 10:58:22
【问题描述】:
直接来自thisjava doc:
此禁令的一个特殊情况是不允许 映射以包含自己作为键。虽然允许地图 将自身包含为一个值,建议格外小心:equals 和 hashCode 方法不再在这样的地图上得到很好的定义。
为什么哈希码和等号不再在这样的地图上得到很好的定义?
【问题讨论】:
-
如果我没记错的话,equals 方法会检查地图的内容是否相等。这是使用内容的 equals 方法完成的,即地图本身。我很确定我们最终会遇到 StackOverflowError
-
可能是 map equals 函数的样子?也许它会导致无限循环?只是一个想法
-
@MarcoForberg 如果我没记错的话,最好检查您要比较的对象是否真的是您自己,如果是,则立即返回 true。
-
@NamSan 创建两张地图(比如说 A 和 B)并将 A 放入 B 并将 B 放入 A。现在尝试 A.equals(B)。您将获得预期的行为,并且检查引用相等性在这里没有帮助,但是顺便说一句。每当我执行
equals()时,我都会按照你说的做;) -
@MarcoForberg 在您的示例中,它最终会产生 StackOverflowError,但在问题中给出的示例中,它不会产生 StackOverflowError
标签: java dictionary equals hashcode