equalsメソッドを使いこなそう!Java初心者の勉強

文字が一致しているかどうか調べる時に、使えばいいのねくらいにしか思っていなかったequalsメソッドを掘り下げていきたいと思います。

equalsメソッドとは

Objectクラスのメソッドです。同値性の比較をしbooleanを返します。
同値性の確認はクラスによって異なるためオーバーライドして使用されることが多いです。
※ 同値 = 異なるインスタンスだが同じ値を持っている

構文

public boolean equals(Object obj)

ルール

  • null以外の参照値xがあった時、x.equals(x)はtrueを返す
  • null以外の参照値x、yについて、y.equals(x)がtrueを返す場合に限り、x.equals(y)はtrueを返す
  • null以外の参照値x、y、zについて、x.equals(y)がtrueを返し、y.equals(z)がtrueを返す場合、x.equals(z)はtrueを返す
  • null以外の参照値x、yについて、x.equals(y)の複数回呼出した時、比較で使われた情報が変更されていなければ、一貫してtrueを返すか、一貫してfalseを返す
  • null以外の参照値xについて、x.equals(null)はfalseを返す

x == yがtrueの場合にだけtrueを返します。オーバーロードする際も上記ルールを守る必要があります。

サンプルコード

せっかくなのでequalsメソッドを使ってみたいと思います。

よく見るequalsメソッドの使われ方(文字列の比較)

public class Main {
    public static void main(String[] args) {
        String str = "test";
        Object obj = "test";
        System.out.println(str.equals("test"));
        System.out.println(str.equals("hehe"));
        System.out.println(str.equals(obj));
    }
}

結果

true
false
true

equalsメソッドをオーバーライドしてみる

public class Sample {
    int num;
    Sample(int num){
        this.num = num;
    }
    public boolean equals(Object obj){
        if(obj == null){
        return false;
        }
        if(obj instanceof Sample){
            Sample sam = (Sample) obj;
            return sam.num == this.num;
        }
        return false;
    }
}

public class Main {
    public static void main(String[] args) {
        Sample s1 = new Sample(9);
        Sample s2 = new Sample(10);
        Sample s3 = new Sample(9);
        System.out.println(s1.equals(s2));
        System.out.println(s1.equals(s3));
    }
}

結果

false
true

おわり

x.equals(null)がfalseを返すことを知らなくてJavaSEの資格の勉強中何度間違えたことか。
あまりにも間違えたので今回記事にしてみました。参考になれば幸いです。

Java

Posted by Nakamoto