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,不然会穿透}..........//可以有很多个casedefault :{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语句了
switch中的case穿透现象,记得break相关推荐
- C语言多case自动跳出,C语言switch中case后跟随break语句
1.case后面的常量表达式实际上只起语句标号作用,而不起条件判断作用,即"只是开始执行处的入口标号". 因此,一旦与switch后面圆括号中表达式的值匹配,就从此标号处开始执行: ...
- switch case穿透Java_Switch语句的case穿透
Switch语句的case穿透 一 switch语句几点说明: 1. case后面只能是常量,不能是变量,而且,多个case后面的值不能出现相同的. 2.case后面表达式可以接受: 基本数据类型,b ...
- 在switch语句中,case后的标号只能是什么?
switch语句用于基于不同条件执行不同动作. 语法格式: switch (变量表达式) { case 常量1: 语句;break; case 常量2: 语句;break; case 常量3: 语句; ...
- 为什么switch里的case没有break不行
前言 一个小姐姐拿着一个switch的选择题来问我. 之所以这么笃定地回答这个问题,并不是我知道其中原理,而是之前在一个群里,有人问了同类型的问题,我瞥了一眼记住了答案,所以才依葫芦画瓢. 小姐姐接着 ...
- c语言case标号是连续的吗,在switch语句中,case后的标号只能是什么?_后端开发...
在switch语句中,case后的标号只能是常量表达式.在一个特定的switch语句中,每一个case常量都必须具有举世无双的值,不能够反复.然则switch语句能够包括多个case标签. switc ...
- break在java语言中什么意思,c语言中break是什么意思?
break在switch(开关语句)中在执行一条case后跳出语句的作用. break语句通常用在循环语句和开关语句中.当break用于开关语句switch中时,可使程序跳出switch而执行swit ...
- java break在switch_java中switch case语句需要加入break的原因解析
java中switch case语句需要加入break的原因解析 java 中使用switch case语句需要加入break 做了具体的实例分析,及编译源码,在源码中分析应该如何使用,大家可以参考下 ...
- C语言switch中break的作用,C语言中switch...case语句中break的重要性
在C语言中switch...case语句是经常用到的,下面我介绍一下在使用该语句时候需要注意的一个细节问题.话不多说,直接举例子: 例子1: switch(fruit) { case 1:printf ...
- switch case穿透Java_Java switch的用法与case的穿透现象举例详解
switch和if-else的用法类似: if(x == 3) { }else if(x == 30) { }else if(x == -6) { }else { }等同于switch的: switc ...
最新文章
- xml python2.6_如何使用前缀选项解析python 2.6中的参数为-f file.xml
- Py之PIL:Python的PIL库的简介、安装、使用方法详细攻略
- list set map 各自实现类的区别以及它们的底层原理和实现(部分)
- BCB 编写 DLL 终极手册
- 1 客户端性能--浏览器页面处理
- TCP/IP的四层负载均衡
- JavaScript深入浅出第1课:箭头函数中的this究竟是什么鬼?
- php制作后台驻留执行 ,同时提前返回逻辑信息进行判断的实例
- python 绘制图表生成svg文件_python用Pygal如何生成漂亮的SVG图像详解
- java防止浏览器直接打开下载的文件
- 对Windows学习的总结
- 虚拟机下载-下载windows镜像
- AB1562_UT软件分辨真假洛达1562A,洛达1562a怎么鉴别?
- 学生选课系统软件测试报告,学生选课系统-软件可用性测试实验
- matlab画进化树分析图,系统发育(进化)树绘制小结
- 批处理删除文件夹命令_批处理文件夹命令
- m序列 MATLAB仿真
- 实验报告C语言顺序结构程序,顺序结构程序设计-C语言程序实验报告
- MacBook Air(2012)维修笔记
- 英语说10点20有计算机课,101 projects in 1001 days实例