使用场景
在java中,用来对比两个对象是否相等。
使用区别
下边从两个角度介绍了他们的区别:一个是性能,一个是可靠性。他们之间的主要区别也基本体现在这里。
equals既然已经能实现对比的功能了,为什么还要hashCode呢?
因为重写的equals里一般比较的比较全面比较复杂,这样效率就比较低,而利用hashCode进行对比,则只要生成一个hash值进行比较就可以了,效率很高。hashCode既然效率这么高为什么还要equals()呢?
因为hashCode并不是完全可靠,有时候不同的对象他们生成的hashcode也会一样(生成hash值得公式可能存在的问题),所以hashCode只能说是大部分时候可靠,并不是绝对可靠,所以我们可以得出(PS:以下两条结论是重点,很多人面试的时候都说不出来):
- equals()相等的两个对象他们的hashCode()肯定相等,也就是用equals()对比是绝对可靠的。
- hashCode()相等的两个对象他们的equals()不一定相等,也就是hashCode()不是绝对可靠的。
使用建议
在需要大量并且快速对比时,比如集合中中元素对比,可以按以下顺序使用:
- hashCode的高效做第一次对比;
- 对hashCode相同,再使用equal进行可靠性对比。