equals()和 == 区别。为什么重写equals 要重写hashcode详细解答
用法区别&来源区别
== 是运算符,equals是Object类定义的一个方法 ,
区别一:一个是运算符,一个是方法
区别二:== 可以用于基本数据类和引用数据类型,equals 只能用于引用类型
本质区别
== 两端如果是基本数据类型,就是判断值是否相同
equals在重写之后,判断两个对象的属性值是否相同
equals如果不重写,其实就是 == 符号
(Object类下不重写)源码如下:
为什么重写equals?
重写equals可以让我们自己定义判断两个对象是否相同的条件
扩展(哈希码:一个类的对象,区别于当前类其他任何一个类的编码)
Object中定义的hashcode方法生成的哈希码能保证同一个类的对象的哈希码一定是不同的
当equals返回为true,我们在逻辑上可以认为是同一个对象,但是查看哈希码,发现哈希码不同,和equals方法返回结果违背。
重写hashcode之后,我们可以自定义哈希码的生成规则,可以通过对象的属性值计算出哈希码。
Object中的hashcode 方法生成的哈希码和对象本身的属性无关。
HashMap 中,借助equals 和 hashcode 方法来完成数据的存储,将对象的内容查询转为根据索引查询。