[size=medium]下面是switch的简单写法:
switch(A){
case B;
}
A部分中的值必须是int型的,或者是能够自动进行隐式转换成int型的表达式。也就是说A部分可以是[color=red]byte/short/char/int[/color]型的。
其次要强调的是该程序中B部分的值必须是单个[color=red]byte/short/char/int(
记忆:basic 基本数据类型)型的值,或者是final型的变量。[/color]
但是final型的变量也是有要求的,也即是它必须是编译时的常量,怎么讲呢,看下面的程序段:
final int a = 0;
final int b;
第二个语句就是在编译时不能够被识别出值的变量,因为它没有初始化,当然,这条语句也是错误的。
所以总结case后的值可以是常数值或final型的值。
再看下面的程序段:
public class TestSwitch {
public static void main(String[] args){
byte a = 11;
switch(a){// C
case 11 : System.out.println(" 11 "); break;
case 225 : System.out.println(" 11 "); break;// D
}
}
}
该代码正确吗?答案是否定的。虽然在 C 处是合法的也即是byte型的a值可以出现在switch中,但是 D处的语句也即是第二个case后的值是225大小超过了byte的范围([color=red]case值不能超过变量a的范围[/color]),所以是错误的。再就是[color=red]case后的值不能出现重复[/color]。因此在使用中要注意。
=====================
再就是在使用switch-case中最容易忽视的就是忘记在每个case后处理完后忘记写上break;语句。那它带来的后果是什么呢,下面小程序段会告诉你:
public class TestSwitchCase {
public static void main(String[] args){
byte a = 2;
switch(a){
case 1 : System.out.println(" A ");
case 2 : System.out.println(" B ");
case 3 : System.out.println(" C ");
case 4 : System.out.println(" D ");
default : System.out.println(" default ");
}
}
}
=========输出结果为:
B
C
D
default
--------------------------
看到了吗?连default都执行,注意结束符break;就OK了。
[color=red]default就是如果没有符合的case就执行它,default并不是必须的.
case后的语句可以不用大括号.
一旦case匹配,就会顺序执行后面的程序代码,而不管后面的case是否匹配,直到遇见break,跳出语句
switch-case语句完全可以与if-else语句互转但通常来说switch-case语句执行效率要高
[/color]
[/size]
switch(A){
case B;
}
A部分中的值必须是int型的,或者是能够自动进行隐式转换成int型的表达式。也就是说A部分可以是[color=red]byte/short/char/int[/color]型的。
其次要强调的是该程序中B部分的值必须是单个[color=red]byte/short/char/int(
记忆:basic 基本数据类型)型的值,或者是final型的变量。[/color]
但是final型的变量也是有要求的,也即是它必须是编译时的常量,怎么讲呢,看下面的程序段:
final int a = 0;
final int b;
第二个语句就是在编译时不能够被识别出值的变量,因为它没有初始化,当然,这条语句也是错误的。
所以总结case后的值可以是常数值或final型的值。
再看下面的程序段:
public class TestSwitch {
public static void main(String[] args){
byte a = 11;
switch(a){// C
case 11 : System.out.println(" 11 "); break;
case 225 : System.out.println(" 11 "); break;// D
}
}
}
该代码正确吗?答案是否定的。虽然在 C 处是合法的也即是byte型的a值可以出现在switch中,但是 D处的语句也即是第二个case后的值是225大小超过了byte的范围([color=red]case值不能超过变量a的范围[/color]),所以是错误的。再就是[color=red]case后的值不能出现重复[/color]。因此在使用中要注意。
=====================
再就是在使用switch-case中最容易忽视的就是忘记在每个case后处理完后忘记写上break;语句。那它带来的后果是什么呢,下面小程序段会告诉你:
public class TestSwitchCase {
public static void main(String[] args){
byte a = 2;
switch(a){
case 1 : System.out.println(" A ");
case 2 : System.out.println(" B ");
case 3 : System.out.println(" C ");
case 4 : System.out.println(" D ");
default : System.out.println(" default ");
}
}
}
=========输出结果为:
B
C
D
default
--------------------------
看到了吗?连default都执行,注意结束符break;就OK了。
[color=red]default就是如果没有符合的case就执行它,default并不是必须的.
case后的语句可以不用大括号.
一旦case匹配,就会顺序执行后面的程序代码,而不管后面的case是否匹配,直到遇见break,跳出语句
switch-case语句完全可以与if-else语句互转但通常来说switch-case语句执行效率要高
[/color]
[/size]