覆盖equals时总要覆盖hashCode

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了覆盖equals时总要覆盖hashCode相关的知识,希望对你有一定的参考价值。

Object条约规定:相等的对象必须具有相同的散列码hashCode

假如将只覆盖equals方法,没覆盖hashCode方法的类用于HashMap中,将会出现问题,会出现get()方法返回时不是同一个对象

这就相当于将对象put进一个散列桶,却在另一个散列桶get这个对象,就算刚好是put和get都在同一个散列桶中,get方法也必定会返回null,这是因为HashMap做了优化,只要是hashCode的值不相同时就不再判断对象是否相同。

所以在覆盖equals()方法时总要覆盖hashCode()方法。

 

以上是关于覆盖equals时总要覆盖hashCode的主要内容,如果未能解决你的问题,请参考以下文章

覆盖equals时总要覆盖hashCode

第9条:覆盖equals时总要覆盖hashCode

Java 对象 覆盖equals时总要覆盖hashCode

effectiveJava覆盖equals时总要覆盖hashcode

覆盖equals时总要覆盖hashCode

Effective Java 第九条:覆盖equals时总要覆盖hashCode