概述
switch语句的功能类似 if…eles if…else 语句
switch语句格式
switch(表达式) {
case 常量值1:
语句体1;
break;
case 常量值2:
语句体2;
break;
...
default:
语句体n+1;
break;
}
执行流程:
- 计算出表达式的值
- 将值 和case后面的常量 比较,如果相同,就会执行相应的 语句体1,遇到break就跳出switch语句
- 如果 和case后面常量都不相同,就会执行 default语句体 部分,然后结束switch语句
例子:
//定义变量,判断是星期几
int weekday = 6;
//switch语句实现选择
switch(weekday) {
case 1:
System.out.println("星期一");
break;
case 2:
System.out.println("星期二");
break;
case 3:
System.out.println("星期三");
break;
case 4:
System.out.println("星期四");
break;
case 5:
System.out.println("星期五");
break;
case 6:
System.out.println("星期六");
break;
case 7:
System.out.println("星期日");
break;
default:
System.out.println("你输入的数字有误");
break;
}
switch支持的数据类型
switch语句中,表达式的数据类型,可以是:byte,short,int,char,及其包装类,enum(枚举),字符串
JDK1.5之前
只支持 byte、short、char、int 四种数据类型
byte、short、char类型可以 隐式转换 int类型,所以可以认为switch只支持 int 类型
JDK1.5
支持enum枚举
枚举类有一个ordinal方法,该方法实际上是一个int类型的数值支持byte、short、char、int的包装类
jdk1.5支持自动拆箱、装箱,所以switch支持包装类
JDK1.7
支持 String 类型,String类型有 hashCode方法,返回值是 int 类型
case的穿透性
在switch语句中,如果case的后面 不写break,将出现 穿透现象,也就是 不会再判断下一个case的值,直接向后运行,直到遇到break,或者整体switch结束。
int i = 5;
switch (i){
case 0:
System.out.println("执行case0");
break;
case 5:
System.out.println("执行case5");
case 10:
System.out.println("执行case10");
default: System.out.println("执行default");
}
执行结果如下:
执行case5
执行case10
执行default
解释:
上述程序中,执行case5后,由于没有break语句,程序会一直向后走,不会在判断case,也不会理会break,直接 运行完整体switch。
注意:
由于case存在穿透性,因此初学者在编写switch语句时,必须要写上break。
switch VS if
if 和 switch 语句都表示条件语句,可以从使用效率和实用性两方面加以区分。
从使用效率上区分
从使用效率上区分,在对同一个变量的不同值作条件判断时,既可以使用 switch 语句,也可以使用 if 语句。使用 switch 语句的效率更高一些,尤其是判断的分支越多,越明显。从实用性上区分
从语句的实用性角度区分,switch 语句不如 if 条件语句,if 语句是应用最广泛和最实用的语句。何时使用 if 语句和 switch 语句
在程序开发的过程中,何时使用 if 语句和 switch 语句,需要根据实际情况而定,应尽量做到物尽其用。不能因为 switch 语句的效率高就一直使用,也不能因为 if 语句常用就不用 switch 语句。需要根据实际情况,具体问题具体分析,使用最适合的条件语句。
一般情况下,对于判断条件较少的,可以使用 if 条件语句,但是在实现一些多条件的判断中,最好使用 switch 语句。
