讲解

条件分支让程序「看情况办事」。最基本的形式是 if (条件) { ... },条件为 true 才执行花括号里的代码;加上 else 处理「否则」的情况;多路判断用 else if 链从上往下逐个检查,命中第一个为真的分支就执行,后面的全部跳过。花括号在只有一条语句时语法上可以省略,但强烈建议永远写上——省略花括号是无数线上事故的源头。

判断条件必须是 boolean 值,这是 Java 比 C/JavaScript 严格的地方:if (age) 这种「非零即真」的写法在 Java 里编译不过。多条件组合用上一章的 &&、||,注意短路顺序。嵌套 if 不要超过两三层,层次太深说明该用「提前返回」或拆分方法重构了。

当判断基于「同一个变量的若干枚举值」时,switch 比 else if 链更清晰。传统 switch 用 case 加 break,漏写 break 会「穿透」到下一个 case 继续执行,是经典陷阱。JDK 14 起新增了 switch 表达式:用箭头 -> 写分支,天然不穿透,还能直接返回一个值赋给变量,配合字符串、枚举判断非常顺手。日常原则:范围判断(大于小于)用 if,枚举值分派用 switch,新代码优先用箭头语法。

示例

if...else if...else 多路判断,注意条件从严到宽的顺序:

public class Main {
    public static void main(String[] args) {
        int score = 85;
        String grade;
        if (score >= 90) {
            grade = "优秀";
        } else if (score >= 80) {
            grade = "良好";
        } else if (score >= 60) {
            grade = "及格";
        } else {
            grade = "不及格";
        }
        System.out.println(score + " 分:" + grade);

        boolean hasTicket = true;
        if (score >= 60 && hasTicket) {
            System.out.println("可以入场");
        }
    }
}

传统 switch 需要 break,漏写会穿透(下面的每个分支都正确写了 break):

public class Main {
    public static void main(String[] args) {
        int weekday = 3;
        switch (weekday) {
            case 1:
            case 2:
            case 3:
            case 4:
            case 5:
                System.out.println("工作日");
                break;
            case 6:
            case 7:
                System.out.println("周末");
                break;
            default:
                System.out.println("无效的日期");
        }
    }
}

JDK 14 的 switch 表达式:箭头语法不穿透,还能直接返回值:

public class Main {
    public static void main(String[] args) {
        String season = "夏";
        String advice = switch (season) {
            case "春" -> "适合踏青";
            case "夏" -> "注意防暑";
            case "秋" -> "适合登高";
            case "冬" -> "注意保暖";
            default -> "未知季节";
        };
        System.out.println(season + "天:" + advice);
    }
}

常见坑

  • else if 顺序写反:把 score >= 60 写在 score >= 90 前面,90 分以上永远进不了「优秀」分支。范围条件必须从最严格到最宽松排列。
  • 传统 switch 漏 break:case 之间会穿透执行,结果出乎意料。箭头语法的 switch 没有这个问题,新代码优先用它。
  • 条件里用赋值号:if (flag = true) 能编译且永远成立。布尔条件推荐写 if (flag),不跟 == true 比较,既简洁又避开这个坑。
  • if 后省略花括号:之后随手加一行代码,它并不在分支里,逻辑立刻错乱。团队规范几乎都强制要求写花括号。

小结

if/else if 按顺序短路匹配,范围条件从严到宽;switch 适合枚举分派,箭头语法防穿透还能返回值。下一节学习让程序重复做事:循环结构。