はじめに
Java の switch 文は、
比較対象の型によって動作が変わる という特徴があります。
- int の比較はどう動く?
- String の比較は equals と同じ?
- どんな型が使えるの?
こうした疑問は、switch の比較ルールを知ると一気にスッキリします。
この記事では、やさしく・実務寄りに
switch の比較対象(int / String の違い)を整理していきます。
まずはコードを確認(int の場合)
Java
int n = 2;
switch (n) {
case 1:
System.out.println("One");
break;
case 2:
System.out.println("Two");
break;
default:
System.out.println("Other");
}int の比較は「値の一致」で判定される
int の場合、
case の値と完全一致したときにそのブロックが実行されます。
- 1 と 1 → 一致
- 2 と 2 → 一致
- 2 と 3 → 不一致
とてもシンプルです。
では String の場合は?
Java
String s = "hello";
switch (s) {
case "hello":
System.out.println("Hi");
break;
case "bye":
System.out.println("Goodbye");
break;
default:
System.out.println("Other");
}String の比較は「equals と同じ」
String の比較は
内部的に equals を使って判定されます。
つまり:
"hello".equals("hello")→ true"hello".equals("HELLO")→ false(大文字小文字は区別)
このルールがそのまま switch に適用されます。
つまり String の switch は「内容比較」
参照比較(==)ではありません。
int と String の比較の違いまとめ
| 比較対象 | 比較方法 | 特徴 |
|---|---|---|
| int | 値の一致 | シンプルで高速 |
| String | equals による内容比較 | 大文字小文字を区別 |
switch で使える型(Java 7 以降)
Java では、switch の比較対象として次の型が使えます。
使える型
- int / byte / short / char(整数系)
- String
- enum
- Integer / Byte / Short / Character(ラッパー型)
使えない型
- boolean
- long
- float / double
- オブジェクト全般(String 以外)
String の比較で起きやすいミス
ミス①:大文字小文字を区別することを忘れる
Java
String s = "HELLO";
switch (s) {
case "hello": // 一致しない
...
}equals と同じなので、 大文字小文字は区別されます。
対策:toLowerCase() を使う
Java
switch (s.toLowerCase()) {
case "hello":
...
}ミス②:null を渡すと NullPointerException
Java
String s = null;
switch (s) { // ← NPEString の switch は内部で equals を使うため、 null を渡すと例外になります。
対策:null チェックを先に行う
Java
if (s == null) return;
switch (s) { ... }実務での使い分け
int の switch が向いている場面
- 数値コードの判定
- パフォーマンス重視
- シンプルな条件分岐
String の switch が向いている場面
- コマンド名
- ステータス文字列
- ユーザー入力の判定
まとめ
int の switch
- 値の一致で判定
- シンプルで高速
String の switch
- equals による内容比較
- 大文字小文字は区別
- null は例外になる
switch で使える型
- 整数系
- String
- enum
- 一部のラッパー型

decopon
switch 文は、 「比較対象の型によって動作が変わる」 という特徴を知るだけで、一気に理解が深まります。特に String の switch は便利ですが、 equals と同じ動きをすることを知っておくと 実務でも安心して使えます。あなたの学びが、次のステップにつながりますように。

moco
int は“数字の一致”、String は“内容の一致”。
この違いを知ると、switch がもっと使いやすくなるよ。

コメント