美文网首页
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