一直对switch语句的使用不是很熟悉,最近空下来整理一下。
switch语句格式如下:
switch(变量) {
case 值 1 : 语句; break;
case 值 2 : 语句; break;
case 值 3 : 语句; break;
case 值 4 : 语句; break;
case 值 5 : 语句; break;
default:语句;
}
一、switch支持的数据类型:
JDK1.5之前,switch循环只支持char、byte、short、int四种数据类型。
JDK1.5开始,switch循环中增加了枚举类与byte short char int的包装类,对四个包装类的支持是因为java编译器在底层手动进行拆箱,而对枚举类的支持是因为枚举类有一个ordinal方法,该方法实际上是一个int类型的数值。JDK1.5之后支持的类型:char、byte、short、int 、Character、Byte、Short、Integer 、枚举。
JDK1.7开始,switch循环支持String类型,但实际上String类型有一个hashCode算法,结果也是int类型.而byte short char类型可以在不损失精度的情况下向上转型成int类型.所以总的来说,可以认为switch中只支持int。JDK1.7之后支持的类型:char、byte、short、int 、Character、Byte、Short、Integer 、String、枚举。
注:switch中,表达式不能为空,为空会抛出NullPointerException。case项即不能为空也不能重复,这两种情况都会出现编译错误。
二、switch语句格式介绍:
1、case后的语句可以不用大括号括起来;
2、每个 case 均以一个 break 结尾。这样可使 执行流程跳转至 switch 主体的末尾。这是构建 switch 语句的一种传统方式,但 break 是可选的。若省略 break,会继续执行后面的 case 语句中的代码,直到遇到 一个 break 为止,这种情况容易造成混淆,但也可以将这一特性善加利用。如:多个case共同处理同一块代码。
1)case语句中不加break关键字:
int i = 2;
switch (i){
case 1:
System.out.println("i=1");
case 2:
System.out.println("i=2");
case 3:
System.out.println("i=3");
case 4:
System.out.println("i=4");
default:
System.out.println("i=default");
}
以上代码输出的结果为:
i=2
i=3
i=4
i=default
2)case语句中加break关键字:
int i = 2;
switch (i){
case 1:
System.out.println("i=1");break;
case 2:
System.out.println("i=2");break;
case 3:
System.out.println("i=3");break;
case 4:
System.out.println("i=4");break;
default:
System.out.println("i=default");
}
以上代码输出的结果为:
i=2
3、若case中没有发现相符的,就执行 default 语句。最后的 default 语句没有 break,因为执行流程已到了 switch 主体的末尾。不过如果考虑到编程风格方面的原因,也可以在 default 语句的末尾放置一个 break,虽然它并没有任何实际的用处。
第一种情况:
int i = 5;
switch (i){
case 1:
System.out.println("i=1");
case 2:
System.out.println("i=2");
case 3:
System.out.println("i=3");
case 4:
System.out.println("i=4");
default:
System.out.println("i=default");
}
第二种情况:
int i = 5;
switch (i){
case 1:
System.out.println("i=1");break;
case 2:
System.out.println("i=2");break;
case 3:
System.out.println("i=3");break;
case 4:
System.out.println("i=4");break;
default:
System.out.println("i=default");
}
以上代码中的两种情况,输出结果均为:
i=default
4、语句的执行结果也受default语句的位置有关(这是比较特殊的)。
1) 第一种情况
int i = 5;
switch (i){
case 1:
System.out.println("i=1");
case 2:
System.out.println("i=2");
default:
System.out.println("i=default");
case 3:
System.out.println("i=3");
case 4:
System.out.println("i=4");
}
以上代码的输出结果为:
i=default
i=3
i=4
2) 第二种情况
int i = 5;
switch (i){
case 1:
System.out.println("i=1");break;
case 2:
System.out.println("i=2");break;
default:
System.out.println("i=default");break;
case 3:
System.out.println("i=3");break;
case 4:
System.out.println("i=4");break;
}
以上代码的输出结果为:
i=default