第 3 章 · 选择结构程序设计

3.1 比较运算符与逻辑运算符

  • 比较:== != > < >= <=,结果是 boolean
  • 逻辑:&&(短路与)、||(短路或)、!(非)。
  • 短路a && b 中若 afalseb 不再求值;a || b 同理。

3.2 选择结构控制语句

单分支

if (age >= 18) {
    System.out.println("成年");
}

双分支 / 多分支

if (score >= 90) {
    grade = 'A';
} else if (score >= 80) {
    grade = 'B';
} else {
    grade = 'C';
}

嵌套 if:一个 if 内再套 if,注意用大括号避免“悬挂 else”(else 总是与最近的未匹配 if 配对)。

常见错误:条件里误用 =(赋值)而非 ==(比较);条件判断字符串相等用 == 比较引用而非 equals

3.3 switch 语句

switch (day) {
    case 1: case 2: case 3:
        name = "工作日";
        break;
    default:
        name = "休息日";
}
  • 传统语法需要 break,否则会贯穿(fall-through)到下一个分支。
  • JDK 14+ 支持箭头语法,无需 break
String name = switch (day) {
    case 1, 2, 3 -> "工作日";
    default -> "休息日";
};

3.4 与其他语言对比

  • C/C++if 条件可用任意整数(非零为真),Java 严格要求 boolean,杜绝了 if (x = 1) 这类经典 bug。C 的 switch 同样会 fall-through。
  • Python:没有传统 switch,用 if/elif/else 或(3.10+)match 结构;缩进代替大括号。
  • 模式匹配:Java 21 的 switch 支持模式匹配,逐步向函数式语言的 match 靠拢。