9.

Javaの条件分岐

編集

本稿は Java の条件分岐に関する記事です。Java の条件分岐には、大きく if 文switch 文の 2 種類があります。条件に応じて処理を分岐させたいときに使い、プログラムの「もし〜なら」を表現するための基本構文です。

各文の詳細は子ページを参照してください。

本ページの子ページ

  • if 文 — 条件式の真偽に応じた分岐
  • switch 文 — 値に応じた多分岐

if 文の基本構文

// 単純な if
if (条件) {
    // 真のとき
}

// if-else
if (score >= 60) {
    System.out.println("合格");
} else {
    System.out.println("不合格");
}

// if-else if-else
if (score >= 90)   { System.out.println("優"); }
else if (score >= 70) { System.out.println("良"); }
else if (score >= 50) { System.out.println("可"); }
else                  { System.out.println("不可"); }

switch 文の基本構文

switch (day) {
  case "MON": System.out.println("月曜"); break;
  case "TUE": System.out.println("火曜"); break;
  case "WED": System.out.println("水曜"); break;
  default:   System.out.println("その他");
}

switch 式 (Java 14+)

Java 14 以降、switch 式として値を返す書き方が利用できます。break 不要・複数値の指定が可能で、フォールスルー事故を防げます。

String name = switch (day) {
  case "MON", "TUE", "WED", "THU", "FRI" -> "平日";
  case "SAT", "SUN" -> "休日";
  default -> "不明";
};

条件式で使う演算子

分類演算子
比較== != < > <= >=
論理&& (AND) || (OR) ! (NOT)
instanceof

if と switch の使い分け

シチュエーション適切な選択
2〜3 分岐、範囲条件if / if-else if
1 つの値に対する多くの等価判定switch
列挙型 (enum) の網羅switch (Java 14+ の式形式が読みやすい)
論理式・複合条件if
パターンマッチ (Java 21+)switch + パターン

switch 文で使える型

  • byte / short / int / char
  • 対応するラッパクラス (ByteInteger 等)
  • String (Java 7+)
  • enum
  • Java 21+ ではパターンマッチングでクラス型も扱える

三項演算子 (条件演算子)

String label = (score >= 60) ? "合格" : "不合格";

短い分岐や代入式の中で便利ですが、複雑な条件には if を使った方が可読性が高いです。

注意点

  • == は値の比較String 等のオブジェクトでは .equals() を使う
  • switch の break 漏れは意図しない fall-through を招く。switch 式 (->) なら防げる
  • else を書かない多段 ifは条件抜けを生みやすい。早期 return / 早期 continue を活用
  • boolean 比較で == true は冗長 (if (x) でよい)
  • NullPointerException — オブジェクト比較前に null チェックを忘れない (Java 7+ の Objects.equals が便利)
  • 列挙型の switch では default を書くか、すべての enum 値を網羅するかをコードレビューで確認

関連

編集
Post Share
子ページ
  1. if文
  2. switch文
同階層のページ
  1. 基本的なルール
  2. データ型
  3. 変数
  4. 定数
  5. 配列
  6. コレクション(List,Set,Queue)
  7. Map(連想配列)
  8. 演算子
  9. 条件分岐
  10. 繰り返し制御文
  11. クラス
  12. メソッド
  13. インスタンス化
  14. コンストラクタ
  15. staticキーワード
  16. オーバーロード
  17. 継承
  18. オーバーライド
  19. this
  20. super
  21. パッケージ
  22. アクセス修飾子
  23. 抽象クラス・メソッド
  24. インターフェース
  25. カプセル化
  26. データベース接続
  27. セッション
  28. ファイル入出力
  29. ラムダ式