获得徽章 6
- equals和==区别?为什么重写equals要重写hashcode?
1)来源上:==是运算符,equals是Object类定义的一个方法;
使用上:==可用于比较基本数据类型和引用类型,equals只能用于引用类型;
==两端如果是基本数据类型,就是判断值是否相同。equals如果不重写,其实就是==,重写的话可以根据属性值来判断对象是否相同。
2)重写equals可以让我们自己定义判断两个对象是否相同的条件。Object类中定义的hashcode方法生成的hash码使得同一个类的对象的哈希码是不同的。当equals返回为true,逻辑上认为是同一个对象,查看hash码是不同的,和equals返回的结果相违背。
Object中定义的hashcode方法生成的hash码跟对象的本身属性值是无关的,重写hashcode之后,可以自定义hash码的生成规则,可以通过对象的属性值计算出hash码。
hashmap中,借助equals和hashcode方法来完成数据的存储。将根据对象的内容查询转换成根据索引的查询。展开43
![[微笑]](http://lf-web-assets.juejin.cn/obj/juejin-web/xitu_juejin_web/img/jj_emoji_1.7d9f699.png)