JavaJava自定义类中重写equals方法

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.

相关文章