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

什么时候该覆盖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对象替换为其他的类型
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 尽管Object是一个具体类,但是设计它主要是为了扩展。它所有的非final方法(equals、hashCode、...
    每天学点编程阅读 662评论 0 3
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,759评论 18 399
  • 1. 尽量避免覆盖equals方法: 因为覆盖equals方法看似很简单,但实际上有许多覆盖方式会导致错误,并且后...
    大海孤了岛阅读 311评论 0 0
  • 人是很容易被“反向塑造”的。尽管本来身处一个高高在上的位置,当面对差不多一个类型,一个阶层的人的时候,反向塑造就渐...
    ArnoRy阅读 427评论 0 2
  • 工程调试过程中发现二中频的输出杂散比较大 问题描述:二中频两旁的杂散出现在频率与幅度上比较有规律 可能原因 初步判...
    谁是我的小超人阅读 172评论 0 0