🌊

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

2023/01/07に公開約1,600字

1.equalsメソッドとは

①.String型などの参照型同士の変数を比較する際に使用します。

②.書き方は下記。
   String型変数_1.equlas(String型変数_2);

③.参照先のインスタンスが同じ値を持っている場合、trueを返します。

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

ログインするとコメントできます