首页 > java > 为什么重写equals时,要同时重写hashCode

为什么重写equals时,要同时重写hashCode

作者:bin

我们比较两个对象是否相等,有两种方式:

1.直接通过运算符 == 比较

2.通过equals比较

通过==比较的是引用地址,通过equals方法看具体类重写的实现,例如string就是比较具体值

 

而重写equals时,为什么要同时重写hashCode方法?

因为在比较对象是否相同,可以先用hashCode进行比较,如果hashCode相同,那么就不用通过==或equals来比较来,有效的减少equal比较次数

 

例如hashMap中,先是比较hash相同,再比较==,最后比较equals,在散列中,先通过hash有效减少equals的执行次数

   if (p.hash == hash &&
        ((k = p.key) == key || (key != null && key.equals(k))))

您必须 [ 登录 ] 才能发表留言!