文字が一致しているかどうか調べる時に、使えばいいのねくらいにしか思っていなかった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の資格の勉強中何度間違えたことか。
あまりにも間違えたので今回記事にしてみました。参考になれば幸いです。
 
											 
							
							
							
															 
									