重写了equals()
方法时,为什么要重新hashCode()
的方法?
作用:hashCode()方法和equals()方法的作用一样,都是对比两个对象是否相等
区别:
equals() 比较对象很多内容,比较全面,耗时较多,效率就比较低,但绝对可靠.
equals() 相等的两个对象, hashCode() 肯定相等
hashCode() 只比较一个 hash值,效率就比较高, 不可靠.
hashCode() 相等的两个对象的equals() 不一定相等
比较原则:
首先, 比较hashCode(), 如果不相同, 两个对象肯定不相同.
如果hashCode()相同, 在比较equals
目的:
既能大大提高了效率,也保证了对比的绝对正确性
"==" 和 equals方法究竟有什么区别?
==比较的是值,
== 如果比较的是基本数据类型, 比较的则是变量值
==如果比较的是引用数据类型, 比较的则是地址值
equals比较的是引用数据类型
如果没有重写hashCode和equals方法, 比较的就是地址值, 因为Object的equals方法中使用的是==
如果重写hashCode()和equals方法,则比较的是重写后的原则
例如: 两个String字符串比较时, 比较的是内容,因为String底层重写了equals方法进行内容的比较