覆盖equals时总要覆盖hashCode

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

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

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

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

 

posted on 2017-10-18 20:19  evanxwj  阅读(157)  评论(0编辑  收藏  举报