赞
踩
Java的流程控制语句中的分支语句有单分支 if ,双分支 if ... else ,多分支 if ... else if .. else,除此之外还有switch语句,其中多分支的情况既可以用if ... else if ...else 还可以用switch来写,基本都能得到想要的结果。
在有两个分支的情况下时,常常可以用if和if else(多分支时也可以用单if),但if和if else在两分支情况下是有区别的:单if写两次意味着两次都会进入if的条件判断语句去进行判断 ,而if else若进入if条件判断时满足执行,那么不会再进入else条件判断中。单if代码举例:
- int num = 50;
-
- if(num > 40) {
- System.out.println("num大于40");
- }
- if(num < 60) {
- System.out.println("num小于60");
- }
该代码的运行结果如下:
if else if else代码举例:
- int num = 50;
-
- if(num > 40) {
- System.out.println("num大于40"); //执行完这句就结束,不会进入else
- } else if(num < 60) {
- System.out.println("测试代码1");
- } else {
- System.out.println("测试代码2");
- }
运行结果如下,在判断满足任何一个条件以后就会终止接下来的判断,所以只会输出一句:
多分支情况下的if... else if... else同理,都是只会进入其中一条语句执行且终止后续判断,相比只用单if语句来得效率更高,单if语句更常用于拦截或者穷举情况。
switch语句也可以用来实现类似的条件分支效果,switch的语法格式如下:
- switch (表达式) {
- case 常量1:
- 语句;
- break;
- case 常量2:
- 语句;
- break;
- ......
- default:
- break;
- }
switch语句中可以匹配的表达式的类型有
byte、short、char、int这四种类型;
枚举类型;
String 类型;(1.7以后开始支持)
switch语句的规则很简单,即拿switch后的表达式的值和case后的值做判断,满足哪个就进入哪个case去执行语句。不过需要注意的是,case之后的值必须和switch变量的类型一致。
此外,switch语句一般都会在最后加上default进行结束,表示如果没有case的值可以匹配上那么最后会执行这条语句。
switch语句只有在匹配上相应的case的值才会进入该case执行语句,若该case在语句最后有break;那么执行完该语句会退出switch,如果该case没有break;那么会直接匹配接下来的case并执行语句(无论是否匹配),直到遇到break;或者default。(case穿透现象)
有break的代码和运行结果举例:
- Scanner sc = new Scanner(System.in);
- System.out.println("请输入天:");
- int day = sc.nextInt();
-
- switch(day) {
- case 1:
- System.out.println("星期一");//有break的情况下
- break;
- case 2:
- System.out.println("星期二");
- break;
- case 3:
- System.out.println("星期三");
- break;
- }
而在没有break的情况下,会出现case穿透现象,代码和运行结果如下:
- Scanner sc = new Scanner(System.in);
- System.out.println("请输入天:");
- int day = sc.nextInt();
-
-
- switch(day) {
- case 1:
- System.out.println("星期一");
- //没有break
- case 2:
- System.out.println("星期二");
- //没有break
- case 3:
- System.out.println("星期三");
- break;
- }
对于多分支情况来说,使用if else if 和 switch通常都可以,但是由于switch的变量类型限制,使用场景相对于if else if来说肯定局限很多,比如switch就无法匹配逻辑判断表达式如 if(a > b && a > c),只能匹配常量。
如果条件分支比较多的情况下,使用switch语句效率会更高,因为switch case语句会生成一个跳转表来指向case分支的地址,而这个表的索引号与switch变量的值是相等的。因此不需要像if else一样一个个遍历去判断,而是直接访问对应索引号,所以效率自然会更高。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。