【Java】== と equals の違いをやさしく解説|初心者がつまずくポイントを実務目線で整理

Java入門・実践
スポンサーリンク
スポンサーリンク

はじめに

Java を学び始めると必ず出てくる疑問が
「== と equals の違いって何?」 という話。

特に String の比較で
"abc" == "abc" が true になったり false になったりして、
「なんで?」と混乱しがちです。

この記事では、やさしく・実務寄りに
== と equals の違いを整理していきます。


まずはコードを確認

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

System.out.println(s1 == s2);     // true(参照が同じ)
System.out.println(s1 == s3);     // false(参照が違う)
System.out.println(s1.equals(s3)); // true(内容が同じ)

コードのしくみを解説

== は「参照が同じかどうか」を比較する

Java の ==
プリミティブ型 → 値の比較
参照型 → 参照(住所)の比較
というルールがあります。

String は参照型なので、
==中身ではなく“住所”が同じかどうか を比較します。

Java
String s1 = "hello";
String s2 = "hello";

s1 == s2 → true(同じ場所を指している)

equals は「内容が同じかどうか」を比較する

Java
s1.equals(s3)

equals は オブジェクトの内容を比較 します。

  • 文字列なら文字列の内容
  • List なら要素
  • 独自クラスなら equals をオーバーライドして比較内容を決める

実務では「内容比較したいときは equals」が基本です。

String は「文字列リテラルの共有(インターン)」がある

Java
String s1 = "hello";
String s2 = "hello";

Java は同じ文字列リテラルを
同じ場所にまとめて保存(インターン) するため、
s1s2 は同じ参照を指します。

そのため == が true になることがあります。

しかし new を使うと別物になります。

Java
String s3 = new String("hello");
s1 == s3 → false

あわせて知っておきたいポイント

プリミティブ型は == で比較してOK

Java
int a = 10;
int b = 10;
System.out.println(a == b); // true

プリミティブ型は値そのものを持つため、
== で問題ありません。

equals をオーバーライドしているクラスもある

  • String
  • Integer
  • List
  • Map

など、多くのクラスは equals を
「内容比較」になるように実装しています。

equalsIgnoreCase も便利

Java
"Hello".equalsIgnoreCase("hello"); // true

大文字・小文字を無視した比較ができます。


使うときに気をつけたいこと

  • 参照型の比較に == を使わない(特に String)
  • 内容比較は equals を使う
  • String の == が true になるのは“たまたま”のことがある
  • new String() を使うと参照が変わる
  • プリミティブ型は == でOK

実務では「== で比較してバグになった」というケースが非常に多いです。


まとめ

== と equals の違い

  • == → 参照比較(プリミティブは値比較)
  • equals → 内容比較

String の注意点

  • リテラルはインターンされるため == が true になることがある
  • new String() は別の参照
  • 内容比較は equals を使う

decopon
decopon

== と equals の違いは、 「参照を比べるのか」「内容を比べるのか」 この1点を押さえるだけで一気に理解が深まります。
Java Bronze の試験でも、実務のバグ調査でも、 ここを知っているだけで安心してコードが書けます。
あなたの学びが、次のステップにつながりますように。

moco
moco

== は“住所”、equals は“中身”。
このイメージを持っておくと、String ともっと仲良くなれるよ。

コメント

タイトルとURLをコピーしました