美文网首页
什么时候重写equal方法

什么时候重写equal方法

作者: 蜗牛写java | 来源:发表于2021-07-25 22:27 被阅读0次

    重写equal场景

    原则上不重写equal方法;

    但是当一个类

    1. 包含一个逻辑相等的概念时,
    2. 而这个逻辑相等又有别于对象标识(Object类的equal方法默认比较的是对象标识),
    3. 而且父类又没有重写equal方法的时候;如:Integer、String等

    重写equal有哪些约定

    • 自反性:非空实例x,x.equal(x) = true
    • 对称性:非空实例x,y;x.equal(y) = true, 那么 y.equal(x) = true
    • 传递性:非空实例x,y,z;x.equal(y) = true, y.equal(z) = true,那么 x.equal(z) = true
    • 一致性:非空实例 x,y,没有更改信息下;多次调用 x.equal(y) 返回结果是不变的
    • null比较返回false:非空实例下;x.equal(null) = false

    重写equal错误示例

    //错误方式;因为参数类型不是Object类型,那么就不是重写 Object 类中的 方法;只不过是重载而已
    public boolean equal(Integer i){
      ...
    }
    
    //正确写法
    @Override
    public boolean equal(Object object) {
      if (object == this) {
        return true;
      }
      if (!(object instanceof MyType)) {
        return false;
      }
      if (object.hashCode() != this.hashCode()) {
        return false;
      }
      //值比较...
    }
    

    重写equal注意点

    • 重写equal方法时,重写hashCode方法
    • 重写equal方法,需要满足自反性、对称性、传递性、一致性、null比较返回false
    • 重写equal方,不要将参数类型改称具体类型

    相关文章

      网友评论

          本文标题:什么时候重写equal方法

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