【java 文字列比較】equalsメソッドを使うたった1つの理由を理解しよう!

javaの文字列比較でequalsメソッドを使う理由PG・PC効率UP・ブログ
javaの文字列比較でequalsメソッドを使う理由

Androidアプリエンジニアのゆーちゃまさんです^^

当サイト「ドロイドブログ」を運営しています。

javaでWebアプリ開発を2~3年、その後Androidアプリを10年以上開発しています^^

javaの勉強を始めたころは…

  • 文字列の比較はequalsメソッドを何でつかうの
  • == で判定してはいけないってどうしてだろ?
ゆーちゃま
ゆーちゃま

こんな疑問をもってました。

この記事で、とても大事なequalsメソッドで比較する理由がわかります!

とっても大事なことなので、早めに理解しておくことが大切!

分かりやすく解説します^^

スポンサーリンク

結論:文字列はオブジェクト型なので変数にはアドレスが入っている

equalsメソッドを利用するたった1つの理由

equalsメソッドは、文字列が等しいかどうかを判定するメソッド。
「==」等価演算子は、オブジェクトが等しいかどうかを判定するもの、文字列比較では使えない。

文字列はオブジェクト型ですので、newをして実体化します。

1行目では、「new」をしないで直接ダブルクォーテーションでくくった「文字列その1」を、変数「str1」に代入していますが、省略して記述できるだけで裏でnewをしています。

2行目と同じです。

javaの変数の説明
javaの変数の説明。変数にはメモリ上に存在する値の住所が入っている。
ゆーちゃま
ゆーちゃま

この2行のコードを図にするとこのような形になります!

「メモリ」とは
パソコンが処理するときの、「作業場」です。
「机の上」に例えられます。
図では青い部分がメモリ:作業場の机の上になります。
「アドレス」とは
文字どうり、住所です。
1行目で作成した文字列「文字列その1」がメモリ上のどこにあるかの住所
図では「1丁目」の住所に存在しています。
同じく、2行目で作成した文字列「文字列その1」はメモリ上の住所「2丁目」に存在しています。

メモリ上に、実際に作成した文字列が存在しているわけですね。

変数は箱に例えられます。

では中身は何がはいっているのでしょうか?

変数(箱)に入っているのは、メモリ上にある1行目・2行目で作成した文字列が置かれている「住所」が入っています。

チェックポイント

変数(箱)に入っているのは、実際の値ではなくてアドレス(住所)が入っている

スポンサーリンク

実際に「==」を使用して文字列の比較をする

ゆーちゃま
ゆーちゃま

では、実際にまず「==」で2つの変数を比較してみましょう!

実行結果

System.out: str1とstr2は等しくない

5行目「str1 == str2」で比較しています。

実行結果は「等しくない」と表示されました。

ゆーちゃま
ゆーちゃま

str1、str2 ともに「文字列その1」と同じ文字列なのに、どうして「等しくない」と判定されるのでしょうか??

チェックポイント

「==」等価演算子での比較は、同じオブジェクトかどうかを判定している

どういう事でしょう?

str1に入っているアドレスは「1丁目」 ⇒ 1丁目にある文字列「文字列その1」

str2に入っているアドレスは「2丁目」 ⇒ 2丁目にある文字列「文字列その1」

1丁目と2丁目に存在する、別のオブジェクトであることが分かります。

結果、オブジェクト自体はそれぞれ別の場所にある別のもの。

str1とstr2は「別々のオブジェクト、同じではないです」と判定。
等しくないため「false」がかえって来て「str1とstr2は等しくない」と表示される。

ゆーちゃま
ゆーちゃま

Aさんの家にある「コカ・コーラ」と、Bさんの家にある「コカ・コーラ」は同じコカ・コーラですが、別々の家に存在する別のコカ・コーラですよね?これと同じことです。

equalsメソッドで比較する

ゆーちゃま
ゆーちゃま

では、同じオブジェクトかどうかでは無くて、「同じ文字列」かどうかを比較判定するにはどうすればよいか?equalsメソッドで判定しましょう!

実行結果

System.out: str1とstr2は等しい

ゆーちゃま
ゆーちゃま

「等しい」と表示されました!これは、同じオブジェクトかどうかを判定しているのではなく、「同じ文字列かどうか」を判定してくれるメソッドだからです。

チェックポイント

Stringクラスの「equals」メソッドは、「文字列じたいが同じかどうか」を判定するメソッド

開発している場合、同じ文字列かどうかの判定は、すごく使います!
とても大事なので、なぜequalsメソッドを利用して比較するのかを理解しておきましょう!

まとめ

  • オブジェクト型の変数に入っているものは、メモリ上の住所(アドレス)
  • 「==」投下演算子での比較は、同じオブジェクトかどうかを判定
  • 「equals」メソッドは、「同じ文字列かどうか」を判定する

この3点は、プログラミングをしていく上で基礎ですがとても大事なことです。

これをあやふやにしたままプログラミングの勉強を勧めてしまうと、後々こまることになります。

あやふやな状態ではなく、しっかり理解しちゃいましょう!

こちらの記事もどうぞ^^

(Visited 247 times, 1 visits today)
スポンサーリンク
スポンサーリンク
スポンサーリンク
PG・PC効率UP・ブログプログラミング
ドロイドブログ

コメント

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