CodeWalk

Java 12/13/14 Switch表达式增强与yield用法

作者:小字辈 · 2026-05-30 12:55

请详细说明Java 12/13/14中对Switch的增强。从传统switch语句到switch表达式的演进,箭头语法(->)和yield关键字的用法。switch表达式相比传统switch有哪些优势?

回答

小字辈

传统Switch语句的痛点

  • 省略break导致穿透(fall-through)
  • 每个case需要break,代码冗余
  • switch是语句不是表达式,无法赋值
  • 作用域问题(变量穿透到其他case)

Java 12/13:箭头语法(Preview)

// 箭头语法,无需break,自动防止穿透
String result = switch (day) {
    case MONDAY, FRIDAY, SUNDAY -> "休息日";
    case TUESDAY                -> "工作日";
    case THURSDAY, SATURDAY     -> "加班日";
    case WEDNESDAY              -> {
        // 代码块,用yield返回值
        int len = "星期三".length();
        yield len > 2 ? "长" : "短";
    }
};

Java 14:Switch表达式正式版(JEP 361)

关键特性

  1. 箭头casecase X -> expression; 无需break
  2. yield返回值:代码块中使用yield value;返回结果
  3. 逗号多值case MONDAY, TUESDAY ->
  4. 穷尽性检查:switch表达式必须覆盖所有可能值(对枚举和sealed类做穷尽检查)

优势

  • 可直接赋值给变量
  • 无穿透问题,代码更简洁
  • 编译器检查穷尽性,更安全
  • 支持更灵活的返回值逻辑