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。
使用实例:
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
);
}
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).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。
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
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"
);
}
注意事项
1).switch(A),括号中A的取值只能是整型或者可以转换为整型的数值类型,比如byte、short、int、char、还有枚举;需要强调的是:java7之前long和String类型是不能作用在switch语句上的, java7之后String可以使用.
2).case B:C;case是常量表达式,也就是说B的取值只能是常量或者int、byte、short、char(比如1、2、3、200000000000(注意了这是整型)),如果你需要在此处写一个表达式或者变量,那么就要加上单引号; case后的语句可以不用大括号,就是C不需要用大括号包裹着;
3).case后面必须要跟常量, 且不能为long或float类型:
private int CLICK_QUERY = 1;
switch (tag)
{
case CLICK_QUERY://错误,CLICK_QUERY不是常量, 用final修饰, 必须是final类型常量,不能是final的变量, 例如:final int CLICK_QUERY = 1; 但不能是final int CLICK_QUERY ;
query(); break;
4).case后面的数值的范围:
byte a = 11;
switch(a){// C
case 11 : System.out.println(" 11 "); break;
case 225 : System.out.println(" 11 "); break;// 225超过了byte的范围(byte的范围是-127~128), 因此会出错