Every Day's Gain

Larry.Zhao's Coding Diary
随笔 - 23, 文章 - 1, 评论 - 2, 引用 - 0
数据加载中……

.equals方法的编写原则

下面是编写完美的equals方法的建议:
1、现实参数命名为otherObject -- 稍后,我们需要把它类型转换为零一个叫做other的变量

2、测试this同otherObject是否是同一个对象:
    if (this == otherObject) return true;
   这其实只是一个优化。实践中,是同一个对象的情况很常见。检查是否相等比进行字段比较花费的开销要小得多。

3、测试otherObject是否为null,如果是,就返回false。这项测试是必需的。
    if (otherObject == null) reutrn false;

4、测试this和otherObject是否属于同一个类。这项测试是“对称性规则”所要求的。
    if (getClass() != otherObject.getClass()) return false;

5、把otherObject的类型转换为你的类所属的类型:
    ClassName other = (ClassName)otherObject

6、最后,比较所有的字段。使用 == 比较基本类型字段,使用equals比较对象字段。如果所有字段都匹配,则返回true;否则,返回false。
    return field1 == other.field1 && field2.equals (other.field2)

如果遵循以上的规则定义了一个类的equals方法,定义其子类的equals方法时,首先调用超类的equals方法。如果这项测试不能通过,对象也就不可能相等。如果超类字段相等,那么需要比较子类的实例字段。

class Manager extends Employee
{
    ...
    public boolean equals (Object otherObject)
    {
        if (!super.equals (otherObject)) return false;
        Manager other = (Manager)otherObject;
        //
       
        return bonus == other.bonus;
    }
}



posted on 2005-08-03 12:09 Larry.Zhao's Coding Diary 阅读(253) 评论(0)  编辑 收藏 引用 所属分类: Java

只有注册用户登录后才能发表评论。