「==」と「equals()」の違い

はじめに

前回に引き続き、「プログラミングを習いたての時に難しかったと感じていた内容を数年経った今の私なりに解説する」シリーズです!!!!

いきなりですが下記のコードを見て、比較結果を考えてみてください。

String a = new String("Java");
String b = new String("Java");

// 比較結果
System.out.println(a == b);
System.out.println(a.equals(b));

a == bについてaもbもJavaなんだからどう見ても同じ(true)だろ!a.equals(b)はあんまり自信ないけどequalとか言ってるし同じっしょ!と思っていました。

しかし、上記の結果は、

false
true

になります。当時は「え、なんで?」と思ったのを覚えています。どちらも「同じかどうか」を確認しているように見えるのに、、、

今回は、そんな「==とequals()って何が違うの?」について、まとめていきたいと思います。

「==」VS「equals()」

ひとことで言うと、

「==」は同じものを指しているか、「equals()」は論理的に同じものかを比較します。

先ほどのコードをイメージすると、

a ‐‐‐→ [ "Java" ]

b ‐‐‐→ [ "Java" ]

aとbは同じ「Java」という文字列を持っています。

しかし、それぞれ別のオブジェクトです。

そのため、

a == b

は「同じオブジェクト?」という比較になるのでfalse

一方、

a.equals(b)

はStringが持っている「文字列の内容が同じなら等しい」というルールに従って比較するのでtrueになります。

つまり、

== ---→ 同じもの?
equals() --→ 同じ内容・意味?

と考えると分かりやすいです。

「同じ」とは何か?

①山田さんと山田さん
②目の前にいる山田さんと、昨日会った山田さん

①は名前は同じですが、別人かもしれません。
②は同じ人物です。
これらはすべて「同じ」という言葉を使っていますが、何を基準にするかは違います。

Javaも同じです。
「何をもって同じか?」という基準(ルール)が決めています。

まとめ

大切なのは、

「何を基準に『同じ』と言っているのか?」

と考えることだと思います。

Javaでは、

== → 同じオブジェクト?
equals() → 論理的に同じ?

というような違いがあります。

--------------------------
開発支援・技術研修のご要望・ご相談はこちらから
--------------------------
【この技術ブログを読んだエンジニアの皆様へ】
カサレアルブログをお読みいただき、ありがとうございます!

私たちは、常に新しい技術に挑戦し、ユーザーのニーズに応えるサービスを提供しています。
もし、当社の技術への情熱や、会社・チーム・社員の雰囲気に共感いただけたなら、
ぜひ私たちと一緒に働きませんか?
現在、株式会社カサレアルでは事業拡大に伴い、新たな仲間となるエンジニアを積極的に募集しています。

少しでも興味をお持ちいただけましたら、まずは弊社のことを知っていただけると嬉しいです。
▼採用サイト
https://www.casareal.co.jp/recruit/career
▼社員インタビュー
https://hrmos.co/pages/casareal/jobs/0000016
▼エンジニアの仲間になる! エントリーはこちらから
https://hrmos.co/pages/casareal/jobs

皆様のエントリーを心よりお待ちしています!

October CMS v4 移行記

コメントを残す

メールアドレスが公開されることはありません。 ※ が付いている欄は必須項目です

コメント ※

名前 ※

メール ※

サイト