この内容は古いバージョンです。最新バージョンを表示するには、戻るボタンを押してください。
バージョン:4
ページ更新者:atom
更新日時:2026-05-13 09:01:03

タイトル: 条件分岐

本稿は 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 値を網羅するかをコードレビューで確認

関連