Javaでのequals()メソッド

855 ワード

equals()メソッドには、次の特性があります.
 
1.自己反転:任意のxに対して、x.equals(x)はtrueを返すべきである.
2.対称:x,yの場合、x.equals(y)はtrueを返し、y.equals(x)のみがtrueを返す.
3.伝達:x,y,z,x.equals(y)およびy.equals(z)に対してtrueを返し、x.equals(z)に対してtrueを返す.
4.一致:x,yに対して、x.equals(y)を複数回呼び出すには、等価比較における情報が変更されていない場合、trueまたはfalseを一致して返すべきである.
5.空でないオブジェクトxの場合、x.equals(null)はfalseを返すべきである.
 
 
この和1に基づいて、次の文は通常equals()メソッドに書かれます.
if(obj == this) return true;

 
プログラマは通常、次の文を書きます.
if( obj instanceOf    ){
        //todo
}

 
現在のクラスにサブクラスがない場合は問題ありません.子オブジェクトも親オブジェクトのインスタンスであるため、ルール2と競合する可能性があります.
解決方法:
if(obj == null) return false;
if(obj.getClass() != this.getClass()){
          return false;
}
//TODO