equalsメソッドとは
equalsメソッドは「同値性(2つのインスタンスは同じ値を持つという性質)」を判定するためのメソッドです。
equalsメソッドはObjectクラスに定義されているメソッドなので、すべてのクラスが引き継いでいますが、同値性の判定条件はクラスによって異なるため、equalsメソッドはオーバーライドして利用することを前提として設計されています。
オーバーライド時のルール
equalsメソッドをオーバーライドする際、以下のルールを守らなければなりません。
1 | null以外の参照値x について、x.equals(x) はtrue を返します。 |
2 | null以外の参照値x およびy について、y.equals(x) がtrue を返す場合に限り、x.equals(y) はtrue を返します。 |
3 | null以外の参照値x 、y 、およびz について、x.equals(y) がtrue を返し、y.equals(z) がtrue を返す場合、x.equals(z) はtrue を返します。 |
4 | null以外の参照値x およびy について、x.equals(y) の複数の呼出しは、このオブジェクトに対するequals による比較で使われた情報が変更されていなければ、一貫してtrue を返すか、一貫してfalse を返します。 |
5 | null以外の参照値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という例外が発生します。
コメント