美文网首页
8.覆盖equals请遵守通用约定

8.覆盖equals请遵守通用约定

作者: 哲学与豆包 | 来源:发表于2018-03-30 20:30 被阅读0次

什么时候该覆盖equals?
简单来说,需要对象比较逻辑相等(不是对象相等的意思) ,并且超类没有满足条件。比如:Integer或者Date。

覆盖equals通用约定
以下x不考虑为null情况

  • 自反性 x.equals(x) == true
  • 对称性 因为 x.equals(y) == true ,所以 y.equals(x) == true
  • 传递性 因为 x.equals(y) == true, y.equals(z) ==true 所以 x.equals(z) == true。
  • 一致性 只要x.equals()方法用到变量信息没有改变, x.equals(y) 结果总会一致
  • 非空性 因为y == null 所以 x.equals(z) == false

作者的建议

  • 覆盖equals时必须覆盖hashCode
  • 不要企图让equals方法过于智能 单纯判断域中的值,而不是各种等价关系 。例如File类不应该试图把指向同一个文件的链接当作相等的对象来看,当然File类也没有这么做。
  • 不要将equals声明中的Object对象替换为其他的类型

相关文章

网友评论

      本文标题:8.覆盖equals请遵守通用约定

      本文链接:https://www.haomeiwen.com/subject/bbgicftx.html