编写完美的一个equals()方法的建议

equals():

  1. 显示参数命名为otherObject,稍后须要将它转换成另外一个叫作other的变量。java

  2. 检测this与otherObject是否引用同一个对象:优化

if(this == otherObject) 
    return true;

      这条语句只是一个优化。实际上,这是一种常常采用的形式。由于计算这个等式要比一个一个地比较类中的域所付出的的代价要小的多。this

   3.  检测otherObject是否为null,若是为null,返回false。这项检测是很必要的。code

if(otherObject == null) 
    return false;

   4.  比较this与otherObject是否属于同一个类。若是equals的语义在每个子类中有所改变,就使用getClass检测:对象

if(getClass() != otherObject.getClass())
    return false;

  若是全部的子类都拥有统一的语义,就使用instanceof检测:get

if(!(otherObject instanceof ClassName))
    return false;

  5.  将otherObject转换为相应的类类型变量:class

ClassName oher = (ClassName) otherObject;

  6.  如今开始对全部须要比较的域进行比较了。使用 == 比较基本类型域,使用equals比较对象域。若是全部的域都匹配,就返回true,不然返回false。变量

return field1 == other.field1 && field2.equals(other.field2) && ...;

若是在子类中从新定义equals,就要在其中包含调用super.equals(other)。引用

相关文章
相关标签/搜索