Java switch详解
## 概述
switch 语句由一个控制表达式和多个case标签组成。
switch 控制表达式支持的类型有byte、short、char、int、enum(Java 5)、String(Java 7)。
switch-case语句完全可以与if-else语句互转,但通常来说,switch-case语句执行效率要高。
default在当前switch找不到匹配的case时执行,default并不是必须的。
一旦case匹配,就会顺序执行后面的程序代码,而不管后面的case是否匹配,直到遇见break。
## 语法格式
```java
switch (表达式) {
case 条件1:
语句1;
break;
case 条件2:
语句2;
break;
...
default:
语句;
}
```
## 使用示例
### int类型switch示例
```java
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);
}
```
### 枚举(Enum)类型switch示例
```java
package net.xsoftlab.baike;
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);
}
}
}
```
### String类型switch示例
```java
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);
}
```
## break
break在switch中用于结束当前流程。
一旦case匹配,就会顺序执行后面的程序代码,而不管后面的case是否匹配,直到遇见break。
### 忘记写break的陷阱
#### 示例
```java
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
```
### 巧用break
#### 输出2015年指定月份的最大天数
```java
int year = 2015;
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);
```
## default
default在当前switch找不到匹配的case时执行。default并不是必须的。
#### 示例
```java
int x = 0;
switch (x) {
case 1:
System.out.println(1);
case 2:
System.out.println(2);
default:
System.out.println("default");
}
```
#### 输出结果
```
default
```