我知道有多个博客讨论“如何重写 equals 和 hashcode”以及“如果我们重写其中一个而不是另一个则会出现问题”。
我的问题很简单。在什么情况下建议覆盖 equals 和 hashcode?
最佳答案
每当您需要覆盖默认的相等概念时就执行此操作:两个对象仅当它们是同一对象时才相等。
换句话说,当两个不同的实例在某种意义上可以“相等”时。
例如,Integer
会覆盖 equals
,因为 new Integer(2) != new Integer(2)
,但您会期望 new Integer(2).equals(new Integer(2))
。直观上,表示 2
的对象应该等于表示 2
的另一个对象。
您需要同时重写 hashCode
,以便您的值与基于哈希的数据结构中的 equal
实现保持一致。
关于java - 何时覆盖 java 中的 equals 和 hashcode,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38125688/