switch中的case穿透现象,记得break

一、switch基本语法格式

switch(int或者string类型的字面值或者变量){
	case int或者string类型的字面值或者变量 :{
	java语句;
	java语句;
	.....
	break;//记得要写## 标题break,不然会穿透
	}
	case int或者string类型的字面值或者变量 :{
	java语句;
	java语句;
	.....
	break;//记得break,不然会穿透
	}
	case int或者string类型的字面值或者变量 :{
	java语句;
	java语句;
	.....
	break;//记得break,不然会穿透
	}
	..........//可以有很多个case
	default :{
	java语句;
	java语句;
	......
	//“1、不是必须有default,有些弱类型语言是不用写的,但是为了程序更完整、更安全,建议写上default”
	/*2、如果default语句在所有case最后,此时可以不加break 如果default语句之后还有case语句
	如果不加break,则default语句执行过之后会继续下面的case语句,此时必须要在default之后加break语句,不过这种default用法是不推荐的
	3、当所有分支都没有匹配成功,当有default的语句的话,就执行default分支中的代码块*/
	}
}

在JDK6中,switch和case后面只能探测int类型。
在JDK7之后包括7版本在内,引入了新特性,switch关键字和case关键字后面可以探测int或者String类型了

二、对case穿透的理解

case穿透就是:当在switch语句中,执行case分支语句,如果满足case1,但是在case1的语句块中,没有加break;,即使case1,满足条件,程序仍然会向下执行case2,即使case2不满足条件,除非case2语句块中有break;,程序会跳出switch选择结构,否则继续执行case3,一直这样执行下去,直到整个switch语句全部执行完毕,才能结束!
下面看代码:穿透情况1+2=0;
原因是因为:1+2=3执行了但是没有break,程序又执行了1-2=-1,但是也没有break,程序有向下执行1*2=2,但是语句中还是没有break;直到1/2=0的时候才有break,之后程序结束输出1 + 2=0;
那么肯定有小伙伴奇怪了,那不应该是1/2=0吗,怎么会是1+2=0呢,
是因为是我的输出:

 System.out.print("当前的运算结果为:"+number1+operate+number2+"="+result);

我输出的是变量operate,operate匹配到的是case中的加号,而不是除号
在这里插入图片描述
下面是加上了break,就解决了case穿透的情况
在这里插入图片描述

三、case合并

例如

int i=10;
switch(i){
case 1 : case 2 : case 10 :
	System.out.println("Test0!");
}
case 4 : case 5 : case 6 :
	System.out.println("Test1!");
}

当i的取值为1 , 2 ,10的时候,都会输出Test0!
当i的取值为4 , 5 ,6的时候,都会输出Test1!
其实就是把几个case分支语句给合并成一个case语句了

  • 10
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值