- 開発技術
Javaの比較におけるequals()と==の違い
- #Java

はじめに
【エンジニア募集中】フルリモート可◎、売上/従業員数9年連続UP、平均残業8時間、有給取得率90%、年休124日以上 etc. 詳細はこちらから>
Javaを勉強していて、文字や数値を比べるときに「==」と「equals()」のどちらを使えばいいか迷った経験はありませんか?どちらも一見すると「等しいかどうか」を比較するためのもので、同じように見えますが、実は目的も仕組みも異なるものです。今回は「==」と「equals()」の違いについて解説します。
「==」は「同じものかどうか」を比べる
「==」は、2つの変数が同じものを指しているかどうかを比べます。つまり、変数の中身が同じでも、別のオブジェクト(箱)に入っていたら違うものとみなされます。
|
1 2 3 4 5 6 7 |
String dog1 = "pochi"; String dog2 = "pochi"; String dog3 = new String("pochi"); System.out.println(dog1 == dog2); // true(同じ箱を見ている) System.out.println(dog1 == dog3); // false(別の箱) System.out.println(dog1.equals(dog3)); // true(中身は同じ) |
ここではdog1とdog2は同じ文字 “pochi” を持っていますが、newを使って別々に作成したため、「==」では別物と判断されます。
equals()は「中身が同じかどうか」を比べる
一方、equals()は変数の中に入っている値そのものを比べます。「==」が同じオブジェクトを見ているかを確認するのに対して、「equals()」はオブジェクトの中身、つまり具体的な文字や数字が一致しているかを確認します。
|
1 2 3 4 |
String dog1 = "pochi"; String dog2 = "pochi"; System.out.println(dog1.equals(dog2)); // true(中身が一致) |
このように、値を比べたいときには「equals()」 を使うのが基本です。
よくある間違い
最初の頃は、どちらを使っても結果が同じに見えることがあります。たとえば、上の例のようにdog1とdog2は「==」でもtrueになりますが、それはJavaが同じ文字をまとめて管理しているからです。同じ文字リテラル(“pochi”)をいくつ書いても、メモリ上では1つにまとめて管理しています。したがってJavaは「“pochi”という文字列はもうある」と判断し、dog1とdog2の両方に同じ場所を指させます。このように、Javaが内部で同じ文字リテラルを使い回すことがあるため、見た目は同じでも「==」の結果が一定ではありません。思わぬエラーを避けるため、文字列やオブジェクトの比較には「equals()」を使うようにしましょう。
まとめ
・「==」は同じ場所(オブジェクト)を見ているか調べる
・「equals()」はオブジェクトの中身の値が同じかを調べる
・文字や数値の比較では「equals()」を使うのが基本
同じ比較でも、動きを知り、目的に応じて使い分けることで、予期せぬエラーを防ぐことにつながります。細かい違いですが、プログラムを書く上で大切なポイントです。
【エンジニア募集中】フルリモートも◎(リモート率85.7%)、平均残業8時間、年休124日以上、有給取得率90% etc. 詳細はこちらから>



