这个问题在这里已经有答案了:
在Java中重写equals和hashCode时应该考虑哪些问题?
(11个答案)
(11个答案)
为什么我需要重写Java中的equals和hashCode方法?
(31个答案)
(31个答案)
8年前关闭的
我在很多地方读到过这样的话,在Java中重写equals方法时,也应该重写hashCode方法,否则就是“违反合同”
但到目前为止,若我只重写equals方法,而不重写hashCode方法,那个么我并没有遇到任何问题
合同是什么?为什么我在违反合同时没有遇到任何问题?在这种情况下,如果我没有重写hashCode方法,我会遇到问题吗
您将遇到的问题是,在集合中,元素的唯一性是根据.equals()和.hashCode()计算的,例如HashMap中的键
顾名思义,它依赖于哈希表,哈希桶是对象的.hashCode()的函数
如果有两个对象是.equals(),但具有不同的哈希代码,则会丢失
合同中重要的一部分是:属于.equals()的对象必须具有相同的.hashCode()
这些都记录在javadoc中,用于对象。约书亚·布洛赫说你必须用有效的Java来做。说够了