简单介绍下 equals 和 hashcode
这两个方法都是顶级类 Object
方法,作用其实都是一样的,用于判断对象是否相等。
equals
方法比较全面且复杂,效率低,利用hashcode
的话只需要一个hash值就行了,效率高。
hashcode()
判断相等不是可靠的(少部分时间):
equal()
相等的两个对象他们的hashCode()肯定相等,也就是用equal()
对比是绝对可靠的。hashCode()
相等的两个对象他们的equal()不一定相等,也就是hashCode()
不是绝对可靠的。hashcode()
不等的对象euqals()
一定不等
所有对于需要大量并且快速的对比的话如果都用 equal()
去做显然效率太低,所以解决方式是,每当需要对比的时候,首先用 hashCode()
去对比,如果hashCode()
不一样,则表示这两个对象肯定不相等(也就是不必再用equal()
去再对比了),如果hashCode()
相同,此时再对比他们的equal()
,如果equal()
也相同,则表示这两个对象是真的相同了,这样既能大大提高了效率也保证了对比的绝对正确性!
equals 和 ==
对于基础数据来说,== 判断的是值是否相等
对于引用对象来说 == 和equals 都是判断的两个对象在jvm中的地址