Java自定义类中重写equals方法

作者: 这是朕的江山 | 来源:发表于2016-05-15 22:38 被阅读2145次

    equals方法的要求:
    a.自反性:对于任何非空的x,x.equals(x)都应该返回true
    b.对称性:对于任何引用x和y,当且仅当x.equals(y)返回true时,y.equals(x)也应该返回true
    c.传递性:对于任何引用x,y,z,如果x.equals(y)返回true,y.equals(z)返回true,那么x.equals(z)也应该返回true
    d.一致性:如果x和y的引用没有发生变化,那么反复调用x.equals(y)的结果应该相同
    e.对于任何非空的引用x,x.equals(null)应该返回false

    public class A   
    {   
           public boolean equals(Object otherObject)
      {
           //测试两个对象是否是同一个对象,是的话返回true
           if(this==otherObject) return true;
           //测试检测的对象是否为空,是就返回false
           if(otherObject==null) return false;
           //测试两个对象所属的类是否相同,否则返回false
           if(getClass()!=otherObject.getClass())  return false;
           //对otherObject进行类型转换以便和类A的对象进行比较
           A other=(A)otherObject;
           //对于值可能为null的属性,检测时应使用Object的equals方法,不为null的可以直接使用==检测
           return Object.equals(类A对象的属性A,other的属性A)&&类A对象的属性B==other的属性B……;
       }    
    }
    

    在子类定义equals方法时使用super.equals方法进行重载复写。

    一般来说,重写了equals方法就同时也要重写hashCode方法

    重写hashCode方法的原因
    public int hashCode()
    {  //其中Double根据需要换成所需类型,第一个乘数因子为素数(也叫质数)
       return 7*Object.hashCode(有可能为null的属性A)+
             11*new Double(不为null的属性B).hashcode()+
             ……
    }
    

    或者有更简单的方法

    public int hashCode()
    {
        return Object.hashCode(属性A,属性B,属性C,……);
    }
    

    That's all.

    相关文章

      网友评论

      • 逍遥键客:JAVA学习群:647355916
      • 密叔:2018年,我开了一个编程私教服务.....一对一专业指导 Java Web 全栈开发https://www.jianshu.com/p/21d5bacf12c7
      • e0daddcb721b:文章中的代码是如何插入的呢?菜单中没有看到插入代码的菜单
        程序o07:Java初高级一起学习分享,共同学习才是最明智的选择,喜欢的话可以我的学习群64弍46衣3凌9,或加资料群69似64陆0吧3(进群备注简书)
      • 眼镜猫头鹰:你好,请问如何用java语言比较两个文件的相似度?

      本文标题:Java自定义类中重写equals方法

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