目 录CONTENT

文章目录

hashcode和equals小结

在水一方
2022-01-19 / 0 评论 / 0 点赞 / 434 阅读 / 756 字 / 正在检测是否收录...

在开发过程中会有一些需要对比对象是否相等的场景,Object默认的equals和hashcode方法比较的是内存地址,而实际开发中有时想比较的是关键属性是否相等,这就涉及到了重写这两个方法

hashcode和equials都是用于判断两个对象是否相等,Map和Set中类集合中用到这2个方法时首先判断hashcode的值,如果hash相等再判断equals的结果

结论

1 如果两个对象的equals方法的结果相等,则两个对象的hashCode方法的返回结果也是相同的

2 任何时候覆写equals方法都必须同时覆写hashCode方法

如果自定义的对象作为Map的键,那么必须覆写hashCode方法和equals方法

因为 Set 存储的是不重复的对象,依据 hashCode 和 equals 进行判断,所以 Set 存储的对象必须覆写这两种方法(见java开发手册第六章集合处理)

可参考String类中重写的eques方法和HashCode方法

参考博客:https://blog.csdn.net/wonad12/article/details/78958411
如何重写:https://www.cnblogs.com/yuxiaole/p/9570850.html

扩展

"=="和equals()方法的区别

"=="用在基本数据类型中它表示的判断2个数的值是否相等,用在引用数据类型当中表示判断2个引用对象的内存地址是否相等

equals()这里需要分清楚2中情况:
1 如果是重写了equals(),那么他表示判断2个引用对象的内容是否相等
2 没有重写equals() 这个时候它的作用就是判断2个引用对象的内存地址是否相等

lombok中的@Data注解默认是重写了对象的hashcode和equals方法

0

评论区