
🟢 はじめに
Javaを勉強していると、数字の周りに "(ダブルクォーテーション)がついていたり、ついていなかったりすることってありませんか?
実はJavaの世界では、「ダブルクォーテーション(")という記号で囲まれているかどうか」で、文字か数字かを完全に区別しています。
まずは、こちらのコードを見てみてください👀
import java.util.Arrays; public class Main { public static void main(String[] args) { Object[] mixedIds = {"10", new String("20"), 30}; String[] stringIds = {"10", "20", "30"}; // Arrays.mismatchは、2つの配列を比べて「最初に中身が食い違う場所(インデックス)」を探すメソッド int diffIndex = Arrays.mismatch(stringIds, mixedIds); System.out.println(diffIndex); } }
このプログラムを実行すると、結果は 2 になります。
つまり、Javaは「0番目(10)と1番目(20)は同じだけど、2番目(30)は違うものだ!」と判断しています。
見た目は同じ「30」なのに、なぜでしょうか?🤔
その秘密は、ダブルクォーテーションにあります!
🪄 ダブルクォーテーション(")は、数字をTシャツのデザインに変換する魔法
Javaに「これは計算用の数字じゃなくて、文字(テキスト)だよ」と伝えるための絶対ルール、それが"" で囲むことです。
👕 "10" などの場合
"" で囲まれた "10" は、例えるなら「10というデザインがプリントされたTシャツ」です。
人間が見れば「あ、10だ」と分かります。
でも、Tシャツなので「この "10" に 5 を足して 15 にして!」と計算することはできませんよね。
Javaは "" を見た瞬間、「なるほど、これは計算用の数字ではなく、ただの文字(String型)だな!」と判断します。
🪙 30 などの場合
一方で "" で囲まれていない 30 は、例えるなら「本物の30円(計算に使えるお金)」です。
"" がついていないので、Javaは「おっ、これは足し算や引き算ができる本物の数字(int型の数値)だな!」と判断します。
🕵️♂️ だからJavaは「違う!」と見抜いた
先ほどのコードの2番目(インデックス2)をもう一度見てみましょう。
stringIds の方: "30" (文字のTシャツ 👕)
mixedIds の方: 30 (本物の数字 🪙)
見た目は同じ「さんじゅう」でも、「Tシャツ」と「本物のお金」くらい全く別物です!
だからJavaは「ここは違う種類のものが入っているぞ!」と判断して、食い違った場所である 2 を教えてくれた、というわけです💡
📦 おまけ:Object[] という「何でも入る魔法の箱」
「そもそも、文字と数字を同じ配列に入れてもいいの?」と疑問に思った方、鋭いです✨
通常、Javaの配列(箱の列)は「文字だけ!」「数字だけ!」と種類を揃えないといけません(String[] は文字専用の箱の列です)。
しかし、mixedIds は Object[](オブジェクト配列) という特別な箱の列として作られています。
この Object というのは、「文字でも、数字でも、どんな種類(型)のものでも入れてOK!🙆♂️」という超万能な魔法の段ボール箱なんです。
だから、この中には、
0番目:"10"(文字のTシャツ 👕)
1番目:new String("20")(新しく作った文字のTシャツ 👕)
2番目:30(本物の数字の硬貨 🪙)
という、全然違う種類のものがごちゃ混ぜに同居できていたんですね。
📝 まとめ
"10"
👉 "" があるから「文字(String型)」
見た目は数字でも計算できないTシャツ👕
30
👉 "" がないから「数字(int型など)」
計算できる本物のお金🪙
Javaは見た目の印象ではなく、「" があるかどうか」という文法(ルール)だけで厳密に判断しています。
この「文字と数字の違い」は、JavaSilverの試験でも実際の開発現場でもめちゃくちゃ重要だと言われていますので、ぜひこの「Tシャツと硬貨」のイメージで覚えてみてください✨
同じように「ダブルクォーテーション(")の使い方がいまいちわからない🤯」と悩んでいる方の参考になれば幸いです🙌