Java中yield仅用于switch表达式(Java 14预览、17正式),不可用于传统switch语句;它向表达式返回分支值,需覆盖所有情况且各yield类型兼容,不可与return混用。

Java 中 switch 语句本身不能直接用 yield 返回数据,yield 是用于 switch 表达式(即带箭头 -> 或大括号 {} 的新式写法)中的关键字,作用是向外部提供计算结果,而不是像传统 switch 语句那样仅执行分支逻辑。
yield 只在 switch 表达式中有效
从 Java 14 开始作为预览特性引入、Java 17 正式成为标准特性的 switch 表达式,支持返回值。此时 yield 用来“产出”某个分支的值,类似 return,但只能出现在 switch 表达式的分支中(不能用于老式语句式 switch)。
- 传统
switch语句(无返回值):不支持yield,只能用break或return - 新式
switch表达式(有返回值):必须用yield(或return,但推荐yield)来指定该分支的返回结果
基本写法:用 yield 返回分支结果
当 switch 作为表达式使用时,类型由各分支 yield 的值共同推断。每个分支必须通过 yield 提供一个值(或抛出异常),且所有 yield 的类型需兼容。
String result = switch (day) {
case MONDAY, FRIDAY, SUNDAY -> yield "3 days";
case TUESDAY -> yield "1 day";
case THURSDAY, SATURDAY -> yield "2 days";
case WEDNESDAY -> {
String msg = "Midweek!";
yield msg; // 多语句分支中必须显式 yield
}
};
yield 和 return 的区别
在 switch 表达式中,yield 表示“向 switch 表达式本身返回值”,而 return 是“从当前方法返回”。混用会导致编译错误或逻辑错乱。
立即学习“Java免费学习笔记(深入)”;
- ✅ 正确:所有分支统一用
yield,表达式整体赋值给变量或作为方法返回值 - ❌ 错误:在 switch 表达式里写
return "xxx"—— 编译不通过(除非在 lambda 或匿名类里,但不是 switch 表达式本意) - ⚠️ 注意:
yield不会跳出方法,只结束当前分支并提交值给 switch 表达式
常见错误与注意事项
使用 yield 时容易忽略编译器的完整性检查和类型一致性要求。
- 必须覆盖所有可能输入(或有
default分支),否则编译失败 - 每个分支都必须有且仅有一个
yield(箭头形式自动隐含;大括号形式需手动写) - 不能在同一个分支里多次
yield,也不能在yield后再写其他语句 - 如果某分支需要复杂逻辑,用大括号包裹,并在末尾
yield—— 这是唯一允许多语句的写法


















