Javaの比較におけるequals()と==の違い

この記事を書いたチーム:frontier

 

はじめに

【エンジニア募集中】フルリモート可◎、売上/従業員数9年連続UP、平均残業8時間、有給取得率90%、年休124日以上 etc.  詳細はこちらから>

Javaを勉強していて、文字や数値を比べるときに「==」と「equals()」のどちらを使えばいいか迷った経験はありませんか?どちらも一見すると「等しいかどうか」を比較するためのもので、同じように見えますが、実は目的も仕組みも異なるものです。今回は「==」と「equals()」の違いについて解説します。

 

==」は「同じものかどうか」を比べる

==」は、2つの変数が同じものを指しているかどうかを比べます。つまり、変数の中身が同じでも、別のオブジェクト()に入っていたら違うものとみなされます。

ここではdog1dog2は同じ文字 “pochi” を持っていますが、newを使って別々に作成したため、「==」では別物と判断されます。

 

equals()は「中身が同じかどうか」を比べる

一方、equals()は変数の中に入っている値そのものを比べます。「==」が同じオブジェクトを見ているかを確認するのに対して、「equals()」はオブジェクトの中身、つまり具体的な文字や数字が一致しているかを確認します。

 このように、値を比べたいときには「equals()」 を使うのが基本です。

 

よくある間違い

最初の頃は、どちらを使っても結果が同じに見えることがあります。たとえば、上の例のようにdog1dog2は「==」でもtrueになりますが、それはJavaが同じ文字をまとめて管理しているからです。同じ文字リテラル(“pochi”)をいくつ書いても、メモリ上では1つにまとめて管理しています。したがってJavaは「“pochi”という文字列はもうある」と判断し、dog1dog2の両方に同じ場所を指させます。このように、Javaが内部で同じ文字リテラルを使い回すことがあるため、見た目は同じでも「==」の結果が一定ではありません。思わぬエラーを避けるため、文字列やオブジェクトの比較には「equals()」を使うようにしましょう。

 

まとめ

・「==」は同じ場所(オブジェクト)を見ているか調べる
・「equals()」はオブジェクトの中身の値が同じかを調べる
・文字や数値の比較では「equals()」を使うのが基本 

同じ比較でも、動きを知り、目的に応じて使い分けることで、予期せぬエラーを防ぐことにつながります。細かい違いですが、プログラムを書く上で大切なポイントです。

 

 

【エンジニア募集中】フルリモートも◎(リモート率85.7%)、平均残業8時間、年休124日以上、有給取得率90% etc. 詳細はこちらから>

Smallitのサービス