You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何switch语句中default块内的case无匹配时仍执行?(OCP-17)

关于Java Switch中default与case并列的疑问解答

先明确你的代码及实际运行结果(修正了描述中的输出误差):

static void f11(){
    var tailFeathers = 3;
    final var one = 1;
    switch (tailFeathers) {
        case one: System.out.print(3 + " ");
        default:
            case 44: System.out.print(5 + " ");
    }
}

这段代码实际运行输出为5 ,你提到的5 2 1 大概率是输入笔误。

下面针对你的核心疑问逐一解答:

1. 为什么这种写法不会触发编译错误?

Java的switch语法里,case和default都是跳转标签,不存在“嵌套”关系——你看到的缩进只是代码格式,编译器完全忽略缩进。default并不是一个“块”的开头,它和所有case标签一样,是switch语句体中的一个标记位置,语法上允许和其他case标签任意顺序排列,哪怕看起来像是在default下方。

2. 为什么匹配default后会执行case44的代码?

这是switch的贯穿(fall-through)机制在起作用:

  • 当switch表达式的值(这里是3)没有匹配到任何case标签时,程序会跳转到default标签的位置开始执行。
  • 由于代码中没有break语句中断执行,程序会从default的位置继续往下顺序执行,包括后续case 44对应的语句——此时case 44只是一个标签,程序已经跳过了匹配阶段,直接执行标签后的代码。
  • 直白说:一旦进入switch的某个标签位置,就会一路往下执行,直到遇到break、return或者switch语句结束。

3. 关于default的本质

default不是“覆盖”case,它只是一个兜底的跳转入口:当所有case都不匹配时,就从default的位置开始执行。它和case的地位是平等的,只是触发条件不同——case匹配特定值,default匹配“所有其他未被case覆盖的值”。

内容的提问来源于stack exchange,提问作者likejudo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 21:47:09