DEV Community

TANIAOKA, Akihiro
TANIAOKA, Akihiro

Posted on

3章12

==演算子とequals()メソッドの違いについて詳しく説明します。同一性(identity)と同値性(equality)の違いも含めて説明します。

同一性(identity)

  • ==演算子は、オブジェクトの参照を比較します。
  • これは、2つの変数が同じオブジェクトを指しているかどうかをチェックします。

例:

String a = "sample";
String b = "sample";
String c = new String("sample");

System.out.println(a == b); // true
System.out.println(a == c); // false
Enter fullscreen mode Exit fullscreen mode

この例では、abは同じ文字列リテラルを指しているので、a == btrueになります。一方、cは新しいオブジェクトを作成しているので、a == cfalseになります。

同値性(equality)

  • equals()メソッドは、オブジェクトの内容を比較します。
  • これは、2つのオブジェクトが同じ値を持っているかどうかをチェックします。

例:

String a = "sample";
String b = "sample";
String c = new String("sample");

System.out.println(a.equals(b)); // true
System.out.println(a.equals(c)); // true
Enter fullscreen mode Exit fullscreen mode

この例では、abは同じ内容を持っているので、a.equals(b)trueになります。同様に、cも同じ内容を持っているので、a.equals(c)trueになります。

まとめ

  • ==演算子は、2つの参照が同じオブジェクトを指しているかどうかを確認します。
  • equals()メソッドは、2つのオブジェクトが同じ内容を持っているかどうかを確認します。

例を通じた理解

String a = "example";
String b = "example";
String c = new String("example");

System.out.println(a == b);      // true (同一の文字列リテラルを指している)
System.out.println(a == c);      // false (異なるオブジェクトを指している)
System.out.println(a.equals(b)); // true (内容が同じ)
System.out.println(a.equals(c)); // true (内容が同じ)
Enter fullscreen mode Exit fullscreen mode

このように、==は参照の比較、equals()は内容の比較です。同一性は同じオブジェクトであること、同値性は内容が同じであることを意味します。

この違いを理解することが、Javaのオブジェクト比較において非常に重要です。

Top comments (0)