Java
 Computer >> コンピューター >  >> プログラミング >> Java

Javaの==演算子とequals()メソッドの違いを解説!文字列比較プログラムの書き方


本記事では、Javaにおける==演算子equals()メソッドの違いについて、具体的なコード例を交えながらわかりやすく解説します。

==演算子とequals()メソッドの基本的な違い

==演算子は、2つのオペランドの値が等しいかどうかを判定する演算子です。条件が満たされればtrueを返します。ただし、文字列のようなオブジェクト型に対して使用した場合は、オブジェクトの参照(メモリ上の位置)が同一かどうかを比較する点に注意が必要です。

一方、equals()メソッドは、呼び出し元の文字列と引数で渡されたオブジェクトを比較します。引数がnullではなく、かつこのオブジェクトと同じ文字並び(シーケンス)を持つStringオブジェクトである場合にのみtrueを返します。つまり、文字列の内容そのものを比較するためのメソッドです。

以下に、実際の動作を示すデモを紹介します。

サンプル入力

The first string : abcde
The second string: 12345

期待される出力

Using == operator to compare the two strings: false
Using equals() to compare the two strings: false

アルゴリズム

ステップ1 – 処理を開始する
ステップ2 – 2つの文字列(input_string_1、input_string_2)と、2つのboolean型変数(result_1、result_2)を宣言する
ステップ3 – 各変数に値を設定する
ステップ4 – ==演算子を使って2つの文字列を比較し、結果をresult_1に代入する
ステップ5 – equals()メソッドを使って2つの文字列を比較し、結果をresult_2に代入する
ステップ6 – 結果を表示する
ステップ7 – 処理を終了する

例1:mainメソッド内にすべての処理を記述する場合

ここでは、すべての操作をmainメソッド内にまとめて記述します。

public class compare {
    public static void main(String[] args) {
        String input_string_1 = new String("abcde");
        System.out.println("The first string is defined as: " +input_string_1);
        String input_string_2 = new String("12345");
        System.out.println("The second string is defined as: " +input_string_2);
        boolean result_1 = (input_string_1 == input_string_2);
        System.out.println("\nUsing == operator to compare the two strings: " + result_1);
        boolean result_2 = input_string_1.equals(input_string_2);
        System.out.println("Using equals() to compare the two strings: " + result_2);
    }
}

出力

The first string is defined as: abcde
The second string is defined as: 12345

Using == operator to compare the two strings: false
Using equals() to compare the two strings: false

例2:オブジェクト指向スタイルでメソッドに分割する場合

ここでは、処理を独立したメソッドとしてカプセル化し、オブジェクト指向プログラミングの考え方に沿って実装します。

public class Demo {
    static void compare(String input_string_1, String input_string_2){
        boolean result_1 = (input_string_1 == input_string_2);
        System.out.println("\nUsing == operator to compare the two strings: " + result_1);
        boolean result_2 = input_string_1.equals(input_string_2);
        System.out.println("Using equals() to compare the two strings: " + result_2);
    }
    public static void main(String[] args) {
        String input_string_1 = new String("abcde");
        System.out.println("The first string is defined as: " +input_string_1);
        String input_string_2 = new String("12345");
        System.out.println("The second string is defined as: " +input_string_2);
        compare(input_string_1, input_string_2);
    }
}

出力

The first string is defined as: abcde
The second string is defined as: 12345

Using == operator to compare the two strings: false
Using equals() to compare the two strings: false

補足:なぜ==演算子はfalseを返すのか?

今回の例では、「abcde」と「12345」という内容が異なる文字列を比較しているため、equals()メソッドもfalseを返します。しかし重要なのは、new String()で生成された2つのオブジェクトは、たとえ内容が完全に同じであっても、メモリ上では別々のインスタンスとして扱われるという点です。そのため、==演算子による比較はfalseになります。

次のコードで、その挙動の違いを確認できます。

String s1 = new String("hello");
String s2 = new String("hello");

System.out.println(s1 == s2);       // false(参照先が異なるため)
System.out.println(s1.equals(s2));  // true (内容が一致しているため)

また、ダブルクォーテーションで直接記述した文字列リテラル(例:String s = "hello";)は、JVMの文字列プールによって管理されるため、同じ内容のリテラル同士を==で比較するとtrueになる場合があります。しかし、コードの意図を明確にする観点からも、文字列の内容を比較する際には必ずequals()メソッドを使用することが推奨されます。

まとめ

  • ==演算子:オブジェクトの参照(アドレス)が同一かどうかを比較する
  • equals()メソッド:文字列の内容(文字並び)が一致しているかどうかを比較する
  • 文字列比較では、原則としてequals()メソッドを使うのが安全
  1. Javaで文字列内の母音をカウントする方法をわかりやすく解説

    Javaでは、拡張forループと条件分岐を組み合わせることで、文字列に含まれる母音(a、e、i、o、u)の数を簡単にカウントできます。この記事では、基本的な実装方法をサンプルコード付きで解説します。 カウントの仕組み まず、カウント用の変数 count を 0 で初期化します。これは、母音の数をこの変数に加算していくためです。 次に、toCharArray() メソッドを使って文字列を1文字ずつ取り出し、Character.toLowerCase() ですべて小文字に変換します。これにより、大文字・小文字を区別せずに母音を判定できるようになります。 for(char ch : myStr.t

  2. Pythonで2つのリストをマージしてソートする方法

    2つのリストを1つに結合(マージ)し、さらに昇順にソートしたいケースはよくあります。Pythonでは、リスト同士を「+」演算子で連結し、組み込みの sort() メソッドを使うことで、シンプルに実現できます。 ここでは、2つのリストを受け取ってマージ・ソートした結果を返す関数の実装例を紹介します。 サンプルコード def merge_list(list_1, list_2): merged_list = list_1 + list_2 merged_list.sort() return(merged_list) list_1 = [20, 18, 9, 51, 48,