lombak引发的对equals和hashcode方法理解

覆盖 equals 时请遵守通用约定:

  • 自反性(reflexive)。对于任何非 null 的引用值 xx.equals(x) 必须返回 true
  • 对称性(symmetric)。对于任何非 null 的引用值 x 和 y,当且仅当 y.equals(x) 返回 true 时,x.equals(y) 必须返回 true
  • 传递性(transitive)。对于任何非 null 的引用值 xy 和 z。如果 x.equals(y) 返回 true,并且 y.equals(z) 也返回 true,那么 x.equals(z) 也必须返回 true
  • 一致性(consistent)。对于任何非 null 的引用值 x 和 y,只要 equals 的比较操作在对象中所用的信息没有被修改,多次调用 x.equals(x) 就会一致地返回 true,或者一致的返回 false
  • 对于任何非 null 的引用值 xx.equals(null) 必须返回 false

覆盖 equals 时总要覆盖 hashCode

在每个覆盖了 equals 方法的类中,也必须覆盖 hashCode 方法 。如果不这样做的话,就会违反 Object.hashcode 的通用约定,从而导致该类无法结合所有基于散列的集合一起正常工作,这样的集合包括 HashMapHashSet 和 Hashtable

覆lombak:@Data注解:

  • 此注解会生成 equals(Object other) 和 hashCode() 方法,是遵循约定的。
  • 它默认使用非静态,非瞬态的属性
  • 可通过参数 exclude 排除一些属性
  • 可通过参数 of 指定仅使用哪些属性
  • 它默认仅使用该类中定义的属性且不调用父类的方法
  • 可通过 callSuper=true 解决上一点问题。让其生成的方法中调用父类的方法

具体详情文章:https://www.cnkirito.moe/java-eqaulsandhashcode/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值