equalsメソッドのオーバーライド

Java Silver

equalsメソッドとは

equalsメソッドは「同値性(2つのインスタンスは同じ値を持つという性質)」を判定するためのメソッドです。

equalsメソッドはObjectクラスに定義されているメソッドなので、すべてのクラスが引き継いでいますが、同値性の判定条件はクラスによって異なるため、equalsメソッドはオーバーライドして利用することを前提として設計されています。

オーバーライド時のルール

equalsメソッドをオーバーライドする際、以下のルールを守らなければなりません。

1null以外の参照値xについて、x.equals(x)trueを返します。
2null以外の参照値xおよびyについて、y.equals(x)trueを返す場合に限り、x.equals(y)trueを返します。
3null以外の参照値xy、およびzについて、x.equals(y)trueを返し、y.equals(z)trueを返す場合、x.equals(z)trueを返します。
4null以外の参照値xおよびyについて、x.equals(y)の複数の呼出しは、このオブジェクトに対するequalsによる比較で使われた情報が変更されていなければ、一貫してtrueを返すか、一貫してfalseを返します。
5null以外の参照値xについて、x.equals(null)falseを返します。
※試験対策ではこのルールだけ覚えておけばOK!
Object (Java Platform SE 8)

例題

上記ポイントを踏まえて例題を解いてみましょう。

以下のコードを実行した場合、出力結果はどのようになるでしょう。

public class Hoge{
  public static void main(String[] args){
    Object x = new Object();
    Object y = null;
    System.out.println(x.equals(y));
  }
}

正解:

falseが出力されます。

ルール5「null以外の参照値xについて、x.equals(null)falseを返します。」は守られなければならない為、falseが返されます。

ちなみに、y.equals(x)だとnull参照になり、NullPointerExceptionという例外が発生します。

コメント

タイトルとURLをコピーしました