JAVA——equals方法的写法

在《java核心技术卷1》中建议equals方法的写法:

1.如果子类拥有自己的相等概念,则使用getclass比较。

public boolean equals (Object otherObject){

    if(this == otherObject)                       //判断是否引用同一个对象
        return true;

    if(otherObject == null)                       //判断是否为null
        return false;

    //如果equals的语义在每一个子类中都有改变,则使用getclass判断类名必须一致。如果子类和超类都使用getclass,则子类定义equals时先判断超类的equals,即if(! (super.equals(otherObject)))  return false;
   // if(getclass() != otherObject.getClass)    
   //     return false;

    ClassName other = (ClassName) otherObject;    //转型为同类对象

    //比较需要判定的实例域。为了防备field2为null,使用Objects.equals方法,当两个实例域都为null时判定为true,如果使用field2.equals(other.field2)则都为null时会放回false。
    return field1 == other.field1 && Objects.equals(field2,other.field2); 


}

比如通过比较名称、薪水、入职日期判断是否为同一个雇员。如果经理类是雇员类的子类,要判断是否为同一个经理,则先用雇员的equals判断,如果通过再判断经理类中独有的实例域是否相等。

 

2.如果由超类决定相等的概念,则使用instanceof比较。

public final boolean equals (Object otherObject){

    if(this == otherObject)                       //判断是否引用同一个对象
        return true;

    if(otherObject == null)                       //判断是否为null
        return false;

    //如果equals在每个子类中都有相同的语义,即子类判断equals的原则都一样,则用instanceof。并且可以将equals方法定义为final表示不用更改,也就是将这个方法静态绑定。
    if(!(otherObject instanceof ClassName))
        return false;

    ClassName other = (ClassName) otherObject;    //转型为同类对象

    //比较需要判定的实例域。为了防备field2为null,使用Objects.equals方法,当两个实例域都为null时判定为true,如果使用field2.equals(other.field2)则都为null时会放回false。
    return field1 == other.field1 && Objects.equals(field2,other.field2); 


}

比如通过雇员的ID来判断是否为同一个雇员,这样经理同样也只需要判断ID,不需要覆盖雇员的equals方法。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值