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){
case1:case2:case10:
System.out.println("Test0!");
}
java switch case stringcase4:case5:case6:
System.out.println("Test1!");
}
当i的取值为1 , 2 ,10的时候,都会输出Test0!
当i的取值为4 , 5 ,6的时候,都会输出Test1!
其实就是把⼏个case分⽀语句给合并成⼀个case语句了
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论