java顺序结构之switch分支语句陷阱

java的分支语句中,当对面情况多种疲于if else的情况下,我们大多数情况下会选择使用switch case进行判断处理不同情况。

 switch结构:

   switch语句由一个控制表达式和多个case组成,形如:

              

switch(expression){
       case condition1 :
            { 
              do something;
              break;
            }
       case condition2 :
            {
             do something;
             break;
            }
       default :
           {
             do something;
             break;
           }
}
                int ex = 2;
		int i = 0;
		switch (ex) {
		case 1:
			i++;
			break;
		case 2:
			i++;
			break;
		case 3:
			i++;
			break;
		case 4:
			i++;
			break;
		default:
			break;
		}
		System.out.println(i);
	


如上代码是一个代码是正常语法书写下的switch语句,switch将ex一次匹配 conditin 1 2 3 4然后自行对应符合条件的执行体。显然结果正常输出为 i = 1;

偶然一次网上遇一代码如下:

		int ex = 2;
		int i = 0;
		switch (ex) {
		case 1:
			i=i+2;
		case 2:
			i=i+2;
		case 3:
			i=i+2;
		case 4:
			i=i+2;
		default:
			i=i+10;
			break;
		}
		System.out.println(i);
	
求i?

初看ex case 2  is true ,then i=i+2;  result is i=2;

其实不然,对比上段switch 在每个case后只缺了个break 对程序影响应该不到,应能正确判断输出,但实际结果 i=16。

原因分析:

 原因是由switch特殊的运行流程决定的,switch语句会先计算出expression表达式的值,然后拿这个值和case标签后的值进行比较,一旦符合条件遇到相等的值,程序就开始执行这个case后面对应的执行体,如果此时执行体内无break关键字且后面还有其他case标签或default标签,程序将不再对case break标签的条件进行匹配而直接运行执行体。

即switch 在case遇到条件匹配的情况后,如无break终止将不再对后续的case default进行匹配判断而直接执行执行体。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值