0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Java Silver対策】Stringの比較で「==」を使ってはいけない理由

0
Posted at

🟢 はじめに

今回は、Java Silverの学習中に引っかかりやすい罠、「String文字列の比較」について解説します!

実は、文字列を比べる時に == を使ってしまうと、思わぬバグを引き起こす原因になります。

RPGのゲームに例えながら、なぜダメなのか、どうすればいいのかを解説していきます。

🚪 合言葉で開く扉(サンプルコード)

まずは、こちらのコードを見てみてください。

まほうのカギ」という合言葉が合っていれば、扉が開くというシンプルなプログラムです。

public class StringCompareRPG {
    public static void main(String[] args) {
        // 王様から聞いた合言葉
        String passwordA = "まほうのカギ";
        
        // 道具屋で新しく買った巻物に書かれた合言葉
        String passwordB = new String("まほうのカギ");

        // 罠:== で比較してしまう
        if (passwordA == passwordB) {
            System.out.println("==の扉:開いた!🚪✨");
        } else {
            System.out.println("==の扉:開かない…🔒💦");
        }

        // 正解:.equals() で比較する
        if (passwordA.equals(passwordB)) {
            System.out.println(".equals()の扉:開いた!🚪✨");
        }
    }
}

パッと見ると、どちらも「まほうのカギ」という文字が入っているので、両方とも扉が開きそうですよね?

でも、これを実行すると……

実行結果

==の扉:開かない…🔒💦

.equals()の扉:開いた!🚪✨

なんと、== を使った扉は開きません!一体なぜでしょうか?

📦 罠の正体:== は「宝箱の場所」を見ている!

Javaの世界では、String文字列)は基本データ型ではなく「オブジェクト参照型)」という特別な扱いになります。

RPGで言うところの「宝箱オブジェクト)」の中に、文字の巻物が入っているイメージです。

== の働き(物理的な比較

== という記号は、「中身の文字」ではなく「まったく同じ宝箱メモリ上の場所かどうか」をチェックします。

今回のコードでは、new String(...) という魔法を使って、わざわざ新しい宝箱をもう一つ作っています。

そのため、中身の文字は同じでも「王様からもらった宝箱」と「道具屋で新しく買った宝箱」は物理的に別のモノだと判定され、扉が開かなかったのです。

📜 正解:中身の文字を読みたい時は .equals() を使う!

では、宝箱の中に入っている「合言葉の文字」だけを純粋に比べたい時はどうすればいいのでしょうか?

そこで登場するのが .equals() という魔法のコマンドです🪄

.equals() の働き(意味の比較)

これを使うと、「宝箱が別々のものであっても、中に入っている巻物の『文字』が同じならOK!」という条件になります。

私たちが日常的に「文字列を比較したい」と思う時は、100%こちらの意味ですよね。

だからこそ、文字列の比較には必ず .equals() を使う必要があります。

📝 まとめ

== は「同じ宝箱場所?」を比べるので、Stringには使わない!❌

.equals() は「中身の文字が同じか?」を比べるので、Stringにはこれを使う!⭕️

Java Silverの試験でも、この「わざと new String() を使って == で比較させる」という引っかけ問題が頻出すると言われています。

ぜひ、「文字列の比較は .equals()!」と、冒険の書に刻み込んでおきましょう!

Java学習中の方の参考になれば幸いです🙌

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?