为什么重写equals方法要重写HashCode方法
一、为什么重写equals方法要重写HashCode方法
在Object类中HashCode和equals是具有相同表现的
① 如果两个对象equals为F,则表示两个对象的地址不同,则对应的HashCode不同。
② 在所有的Hash*结构中,先判断HashCode。由于现有计算HashCode的算法的不完美性,两个完全不同的对象对应的HashCode是有可能相同的。因此,两个对象的HashCode相同,当使用equals进行比较时,结果可能是T,也可能是F。但如果两个对象用equals比较结果为T,则这两个对象对应的HashCode一定相同。
二、equals和“==”的区别
“==”:
① 对于基本数据类型:比较值
② 对于引用数据类型:比较地址
equals():
① 在Object中equals()方法的源码
可以发现在Object类中,equals()和“==”是相同的,但由于参数是一个引用类型,因此比较的是地址。
② String中equals()方法的源码
可以发现String中重写了Object中的equals()方法。在String中先判断两个字符串的地址是否相同,若地址相同,则这两个字符串一定相同;如果地址不同,则一一比对字符串的内容,若内容相同也说明这两个字符串是相等的。
总结
如果不重写Object中的equals()方法,则equals() 比较的是地址