Javaにおける==演算子とequals()メソッドの違いを徹底解説!正しい使い分けのポイント
Javaでは、2つの変数やオブジェクトの等価性を確認するために、== と equals() メソッドの両方が使われます。一見すると似たような役割を持っていますが、この2つには重要な違いがあり、使い分けを誤ると意図しないバグの原因になることもあります。
本記事では、== と equals() メソッドの主な違いを比較表で整理し、実際のコード例を通じてその動作の違いをわかりやすく解説します。
== と equals() メソッドの主な違い
| 番号 | 項目 | == | equals() メソッド |
|---|---|---|---|
| 1 | 種類 | == は比較演算子です。 | equals() はObjectクラスのメソッドです。 |
| 2 | 比較方法 | == は参照比較に使用されます。両方の参照がメモリ上の同じオブジェクトを指しているかどうかを確認します。 | equals() メソッドは内容比較に使用されます。オブジェクトが持つ値そのものが等しいかどうかを評価します。 |
| 3 | オーバーライド | == 演算子はオーバーライドできません。 | equals() メソッドはオーバーライド可能です。オーバーライドされていない場合は、Objectクラスの equals() がそのまま使用されます。 |
== と equals() の動作を確認するサンプルコード
JavaTester.java
public class JavaTester {
public static void main(String args[]) {
String s1 = new String("TUTORIALSPOINT");
String s2 = new String("TUTORIALSPOINT");
// 参照比較
System.out.println(s1 == s2);
// 内容比較
System.out.println(s1.equals(s2));
// int型の値比較
System.out.println(10 == 10);
// char型の値比較
System.out.println('a' == 'a');
}
}出力結果
false true true true
実行結果の解説
・s1 == s2 が false になる理由:new String() で生成された2つのオブジェクトは、メモリ上の別々の場所に存在します。そのため、参照が同じかどうかを確認する == による比較では false が返されます。
・s1.equals(s2) が true になる理由:Stringクラスの equals() メソッドは文字列の内容を比較するようオーバーライドされているため、同じ文字列であれば true が返されます。
・10 == 10 と 'a' == 'a' が true になる理由:int型やchar型などのプリミティブ型の場合、== は値そのものを比較するため、同じ値であれば true が返されます。
まとめ:使い分けのポイント
・プリミティブ型(int、char、booleanなど)の値比較には == を使用します。
・Stringをはじめとするオブジェクトの内容比較には equals() メソッドを使用します。
・特に文字列の比較で == を使うと、同じ内容でも false になるケースがあるため、注意が必要です。オブジェクトの等価性を判定する際は、equals() を使うのが基本と覚えておきましょう。
-
Javaのwait()メソッドとsleep()メソッドの違いを徹底解説
Javaのマルチスレッドプログラミングでは、sleep()メソッドとwait()メソッドのどちらもスレッドの処理を一時停止させるために使用されますが、両者にはいくつかの重要な違いがあります。本記事では、それぞれの特徴と相違点をわかりやすく解説します。 sleep()メソッドとwait()メソッドの主な違い 1. メソッドの種類と影響範囲 sleep()メソッドはThreadクラスのstatic(静的)メソッドであり、呼び出すと現在実行中のスレッドを「実行不可能(Non-Runnable)」状態にします。 一方、wait()メソッドはインスタンスメソッドであり、スレッドオブジェクトではなく対象の
-
Javaのpaint()メソッドとrepaint()メソッドの違いをわかりやすく解説
JavaでGUIアプリケーションを開発する際、コンポーネントの描画に関わるpaint()メソッドとrepaint()メソッドは、役割がまったく異なる重要なメソッドです。この記事では、両者の違いと正しい使い方を具体例とともに解説します。 paint()メソッドとrepaint()メソッドの違い paint()メソッドとは paint()は、コンポーネントを実際に描画するための処理(描画命令)を記述するメソッドです。Java AWTでは、このメソッドをオーバーライドして独自の描画処理を実装します。 一方、Java SwingではpaintComponent()メソッドをオーバーライドするのが推奨さ