マンガで分かる Java入門講座

第10章 クラスとオブジェクト3
10-2. Objectクラス2 オブジェクトの比較

「Object」クラスのメソッド「equals」の紹介と、その挙動について説明します。

● オブジェクトの比較

 オブジェクトの比較には、比較演算子ではなく、「equals」メソッドを使います。このequalsは、java.lang.Objectのメソッドです。

 全てのクラスはObjectを継承しているために、全てのクラスでequalsが使えます。


● 自作クラスのequals

 自作クラスでは、extendsの指定をしていないケースが多いです。その際は、java.lang.Objectを直接継承していることになります。しかしjava.lang.Objectのequalsメソッドには注意が必要です。

 java.lang.Objectのequalsメソッドでは、単に参照が同じか否かを比較演算子で比較しているだけです。オブジェクトの値などは一切考慮されていません。

ソースコード)java.lang.Objectのequals
public boolean equals(Object obj) {
    return (this == obj);
}

 そのため、自作クラスでequalsメソッドを使い、オブジェクトの値を比較させたい場合は、equalsメソッドをオーバーライドする必要があります。


● instanceof

 「instanceof」は、オブジェクトに対して使える比較演算子です。基本型には使用できません。

 instanceofは、左辺にオブジェクトを、右辺にクラスやインターフェースを書きます。そして、右辺が自身のクラスか、祖先のクラスやインターフェースならばtrueと判定されます。

説明)instanceofの結果
オブジェクト instanceof 自身のクラスtrue
オブジェクト instanceof 祖先のクラスtrue
オブジェクト instanceof 祖先のインターフェースtrue
オブジェクト instanceof それ以外false

● 自作クラスのequalsの実装例

 以下、自作クラスにequalsの処理を実装する例を示します。

ソースコード)自作クラスのequalsの実装例
package sample;

public class MyClass {
    public int n = 0;

    // equalsのオーバーライド
    @Override
    public boolean equals(Object obj) {
        if (obj instanceof MyClass) {
            MyClass mc = (MyClass)obj;
            return this.n == mc.n;
        }
        return false;
    }
}

この講座のマンガ部分は「箱人形マンガ(Box Comic) 」で作成しています。
作成:2013/06/05  更新:2015/08/09  [Permalink]