为何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
相关产品推荐
相关产品推荐

