在开发过程中会有一些需要对比对象是否相等的场景,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方法
评论区