在Java中重写equals和hashCode时应考虑哪些问题?

617

在覆盖 equalshashCode 方法时,必须考虑哪些问题/陷阱?

11个回答

6

我发现一个坑点是两个对象互相引用(一个例子是具有方便的父/子关系方法的父对象可以获取所有子对象)。
在进行Hibernate映射时,这些情况比较常见。

如果你在hashCode或equals测试中包含关系的两端,可能会进入递归循环,最终导致StackOverflowException异常。
最简单的解决办法是不在方法中包含getChildren集合。


5
我认为这里的基本理论是区分对象的“属性”、“聚合”和“关联”。其中,“关联”不应参与“equals()”比较。如果一个疯狂的科学家复制了我,我们将是相等的,但我们没有同样的父亲。 - Raedwald

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