为什么重写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))))