重写equlas()方法的规则

equals方法实现了等价关系,一般要满足下列条件


自反性(reflexive)


对称性(symmetric)


传递性(transitive)


一致性(consistent)


对于任意的非空引用值x,x.equals(null)一定返回false.


要实现高质量equals方法,可如下做:

使用==操作符检查“实参是否为指向对象的一个引用” ,如果是,返回true;


使用instanceof操作符检查“实参是否为正确的类型”,

如果不是,返回false;


把实参转换到正确的类型


对于该类中每一个"关键(significant)"域,检查实参中的域与当前对象中对应的域值是否匹配。

如果所有的测试都成功,则返回true;


例如:

class Programer{
     int number;
     public Programer(int n){
          number=n;
     }
     //必须覆盖hashCode()方法  
     public int hashCode(){
          return number;
     }
     public boolean equals(Object obj){
        if(this==obj)) return true;//比较的是两个对象的引用(references)是否相等
        if(obj==null) return false;//检查 obj)是否为空
       if(!(obj instanceof(Programer))) return false;
        return (number==((Programer)obj).number);
     }
}

当编写完成了equals方法之后,应该满足:它是否是对称的、传递的、一致的?
  
注意:


1)当你改写equals的时候,总是要改写hasCode方法

2)不要将equals声明中的Object对象替换为其它的类型

当你的equals不能正常工作时,看看是不是犯了下述例子的错误。

public boolean equals(MyClass o){

...

}
这种方式并不是覆盖object类的equals方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值