System.out.println("Java学習中");

【Java / Spring Boot】UI/UXの視点を活かしたバックエンド開発の学習ポートフォリオ

【Java Silver対策】文字と数字の計算で起きる「コンパイルエラーの罠」

🟢 はじめに

Javaの勉強中、またはJava Silverの試験対策中に、こんなコードに出会ったことはありませんか?

一見すると普通の計算に見えますが、実はコンパイルエラーになってしまう「ひっかけ」が潜んでいます。

今日は、なぜエラーになるのかを「カメレオン」と「頑固職人」の例え話で、初心者向けに分かりやすく解説したいと思います☕️


罠が潜むコード

まずは、RPGゲームのステータス表示をイメージしたこちらのコードを見てみましょう。

public class CalculationTrap {
    public static void main(String[] args) {
        // パターン①:HPの計算?
        System.out.println("HP: " + 100 + 50);

        // パターン②:スコアの計算?
        System.out.println("Score: " + 10 + 5 * 2);

        // パターン③:ダメージ計算?(💥ここでエラー発生!)
        System.out.println("Damage: " + 100 - 20);
    }
}

実はこのプログラム、3つ目のDamageの行でコンパイルエラーになってしまいます。

なぜなのか、Javaの「3つのルール」を知るとスッキリ理解できるようになると思います。


🌟 覚えておきたい3つのルール(キャラクター紹介)

1. 「+」は周りに合わせる【カメレオン🦎】

数字と数字の間にいるときは「電卓🧮(足し算)」として働きます。

しかし、片方に「文字列文字)」がいると、途端に「のり文字をくっつける)」に変身します。

一度「のり」でくっついた数字は、もう「文字」として扱われます。

2. 「*」「/」は特別扱いの【VIP客👑】

Javaの計算は基本的に「左から右」へ進みますが、掛け算*)と割り算/)はVIPです。

行列を無視して真っ先に計算されます。

3. 「-」は計算しかしない【頑固な電卓🧮】

+」のように「のり」には絶対になれません。

純粋な数字同士の引き算しかできない頑固職人です。


📝 1行ずつコードを謎解き

それでは、ルールを思い出しながらコードを解読してみましょう。

パターン①:"HP: " + 100 + 50

ここは基本通り、左から順番に処理されます。

  1. "HP: " + 100
    ➡️ 左側が文字なので、「+」はのりに変身! "HP: 100" という文字列になります。

  2. "HP: 100" + 50
    ➡️ また左側が文字なので、これものりでくっつきます。

  3. 【結果】 HP: 10050 (※150にはなりません!)

パターン②:"Score: " + 10 + 5 * 2

  1. まずはVIP客👑の掛け算が優先! 5 * 2 が先に計算されて 10 になります。 (今の状態: "Score: " + 10 + 10

  2. 次に左から処理します。"Score: " + 10のりでくっつき "Score: 10" になります。

  3. 最後に "Score: 10" + 10。これも文字と数字なのでくっつきます。

  4. 【結果】 Score: 1010

パターン③:"Damage: " + 100 - 20 💥エラー!

  1. 左から処理します。"Damage: " + 100のりでくっつき "Damage: 100"文字列)になります。
    (今の状態: "Damage: 100" - 20

  2. 次に文字列から 20 を引こうとしますが……

  3. エラー発生🚨】
    ここで「-」の登場です。「-」は頑固な電卓なので、「言葉から数字は引けないよ!」とJavaが怒ってしまい、コンパイルエラーになります。


✍️ まとめ

  • 掛け算割り算は先に計算される

  • 文字列に「+」で繋がれた数字は、足し算ではなく「文字の連結」になる

  • 文字列に対して「-」を使おうとするとコンパイルエラーになる

Java Silverの試験でも、この「左から順番に文字化していく罠」は頻出だと言われています。

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


【プロフィール・作品置き場】

kenichikamoi.com


🎵 Youtube(楽曲一覧)はこちら

www.youtube.com