1、概要
(1)switch 语句由一个控制表达式和多个case标签组成。
(2)switch 控制表达式支持的类型有byte、short、char、int、enum(Java 5)、String(Java 7)。
(3)switch-case语句完全可以与if-else语句互转,但通常来说,switch-case语句执行效率要高。
default在当前switch找不到匹配的case时执行。default并不是必须的。
(4)一旦case匹配,就会顺序执行后面的程序代码,而不管后面的case是否匹配,直到遇见break。
2、语法格式
switch (表达式) {
case 条件1:
语句1;
break;
case 条件2:
语句2;
break;
...
default:
语句;
}
3、代码示例
//3.1 int类型switch示例
int i = 3;
switch (i) {
case 1:
System.out.println(1);
break;
case 2:
System.out.println(2);
break;
case 3:
System.out.println(3);
break;
default:
System.out.println(0);
}
//3.2 枚举(Enum)类型switch示例
public class TestSwitch {
static enum E {
A, B, C, D
}
public static void main(String args[]) {
E e = E.B;
switch (e) {
case A:
System.out.println("A");
break;
case B:
System.out.println("B");
break;
case C:
System.out.println("C");
break;
case D:
System.out.println("D");
break;
default:
System.out.println(0);
}
}
}
//3.3 String类型switch示例
String str = "C";
switch (str) {
case "A":
System.out.println("A");
break;
case "B":
System.out.println("B");
break;
case "C":
System.out.println("C");
break;
default:
System.out.println(0);
}
4、break
break在switch中用于结束当前流程。一旦case匹配,就会顺序执行后面的程序代码,而不管后面的case是否匹配,直到遇见break。
//4.1 忘记写break的陷阱
int i = 2;
switch (i) {
case 1:
System.out.println(1);
case 2:
System.out.println(2);
case 3:
System.out.println(3);
default:
System.out.println(0);
}
//输出结果:
2
3
0
//4.2 巧用break
//实例:输出2016年指定月份的最大天数
int year = 2016;
int month = 8;
int day = 0;
switch (month) {
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
day = 31;
break;
case 2:
day = 28;
break;
case 4:
case 6:
case 9:
case 11:
day = 30;
break;
}
System.out.println(day);
5、default
default在当前switch找不到匹配的case时执行。default并不是必须的。
int x = 0;
switch (x) {
case 1:
System.out.println(1);
case 2:
System.out.println(2);
default:
System.out.println("default");
}
//输出结果:
default