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

为何Java switch匹配case后default分支仍执行?技术求助

问题原因分析:Switch语句中Default分支总是执行

这是一个很常见的switch语句使用误区——你没有在匹配的case分支末尾添加break关键字,导致了代码的贯穿执行(fall-through)!

具体原因解释

在Java的switch结构中,当某个case条件匹配成功后,如果没有break来终止当前分支的执行流程,程序会自动继续执行后续所有case和default分支里的代码,直到遇到break或者整个switch语句结束。

你的代码里,INIT、START、STOP这三个case共用同一段输出逻辑,但这段逻辑结束后没有添加break,所以当state为INIT时,执行完System.out.println("1");后,会直接“贯穿”到default分支,执行System.out.println("default");,最终就出现了两行输出。

修复后的代码

只需要在匹配的case分支末尾加上break,就能终止执行流程,避免触发default分支:

public class HelloWorld { 
    public enum ScenarioState { INIT, START, STOP, DESTROY } 
    public static void displayRecord(ScenarioState state) { 
        switch (state) { 
            case INIT: 
            case START: 
            case STOP: 
                System.out.println("1");
                break; // 添加break终止分支执行
            default: 
                System.out.println("default"); 
        } 
    } 
    public static void main(String[] args) { 
        ScenarioState state = ScenarioState.INIT; 
        displayRecord(state); 
    } 
}

修改后运行代码,输出就会符合预期,只打印1。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 04:15:16