😀

【Java】equalsメソッド と == の違い(備忘録)

2023/01/07に公開

1.equalsメソッドとは

・String型などの参照型同士の変数を比較する際に使用します。
参照先のインスタンスが同じ値を持っている場合、trueを返します。

equalsメソッドの文法
変数_1.equlas(変数_2);

2.サンプルプログラム

例1(boolean型変数を使用)

Main.java
public class Main {
    public static void main(String[] args) {
        String Password = "01234@";
        String confirm_Password = "@98765";

        // 参照先のインスタンスが同じ値を持っているか否か       
        boolean isCorrect = Password.equals(confirmPassword);
        System.out.println(isCorrect);
    }
}
実行結果
  false

例2(equalsメソッドと==の比較)

Main.java
public class Main {
    public static void main(String[] args) {
        String word_1 = "test";
        String word_2 = word_1;

        // 参照先のインスタンスが同一か否か
        System.out.println(word_1 == word_2);
        // 参照先のインスタンスが同じ値を持っているか否か
        System.out.println(word_1.equals(word_2));
	}
}
実行結果
    true
    true

解説:
 word_1変数をword_2変数に代入しています。
 つまり、参照先のインスタンスは同じ値を持っています。
 よって、equalsメソッドを使用するとtrueが戻ってきます。

例3

Main.java
public class Main {
    public static void main(String[] args) {
        String word_1 = "test";
        String word_2 = "test";

        // 参照先のインスタンスが同一か否か
        System.out.println(word_1 == word_2);
        // 参照先のインスタンスが同じ値を持っているか否か 
        System.out.println(word_1.equals(word_2));
	}
}
実行結果
    true
    true

解説:
 同じ文字列リテラルがプログラムに再登場した場合、定数用メモリ空間にある文字列インスタンスへの参照が使い回しされます。
 こうすることで、メモリ消費を抑制できます。
 このような仕組みを「コンスタントプール」と呼びます。
 文字列インスタンスへの参照が使い回されている場合、trueが返ってきます。

3.参考

コンスタントプールとは

Discussion