Java switch语句执行疑问:匹配'A'为何会执行'Y'分支?
Switch语句执行逻辑解析
问题代码
public class Demo { public static void main(String args[]) { char c = 'A' ; int num = 10 ; switch(c) { case 'B' : num++ ; case 'A' : num++ ; case 'Y' : num++ ; break ; default : num-- ; } System.out.println(num); } }
疑问
我原本认为程序只会进入case 'A'分支,num的值会变为11。但在IDEA中运行后,发现程序执行了case 'A'和case 'Y'分支(对此感到疑惑),最终num的值为12。
我执行了代码System.out.println('A' == 'Y');,返回结果为false,想了解该现象的原因。
原因解析
核心是switch语句的“贯穿执行”特性:当某个case分支匹配成功后,如果该分支末尾没有break关键字,程序不会跳出switch结构,会依次执行后续所有case(包括default)的代码,直到遇到break或者switch结构结束。
具体到你的代码执行流程:
- 变量
c='A',匹配到case 'A'分支,执行num++,此时num从10变为11; - 由于
case 'A'分支没有break,程序不会停止,继续执行下一个case 'Y'的代码,再次执行num++,num变为12; case 'Y'分支末尾有break,程序跳出switch结构,最终输出12。
你测试'A' == 'Y'返回false是正确的,这说明两个字符本身不相等,但这和switch的执行逻辑无关——switch是匹配到对应case后开始执行,没有break就会持续向下执行后续分支,并非只执行匹配的单个case。
修正方案
如果希望程序仅执行case 'A'分支,只需在该分支末尾添加break关键字,修改后代码如下:
public class Demo { public static void main(String args[]) { char c = 'A' ; int num = 10 ; switch(c) { case 'B' : num++ ; break; case 'A' : num++ ; break; // 添加break,执行完该分支即跳出switch case 'Y' : num++ ; break ; default : num-- ; } System.out.println(num); // 此时输出11 } }
内容的提问来源于stack exchange,提问作者Franz Kafka
相关产品推荐
相关产品推荐

