一、基本语法
switch语句是Java中的一种流程控制语句,可以根据表达式的值,匹配相应的case分支执行对应代码。其基本语法如下:
switch(expression){ case value1: //执行代码块1 break; case value2: //执行代码块2 break; ... default: //执行默认代码块 }
其中expression为表达式,value1、value2为常量值。case分支可以有多个,对应不同的常量值。当expression的值与某个case的常量值相等时,该case分支中的代码块将被执行。default分支可选,当所有case分支都不满足时,将执行default分支中的代码块。
二、兼容性问题
在Java SE 5.0版本之前,switch语句只能使用枚举类型、整数类型(byte、short、char、int)和String类型作为表达式。在Java SE 7版本之后,switch语句可以使用枚举类型、整数类型、String类型以及对应包装类和枚举类型的可转换类型,比如byte、short、char、int。
需要注意的是,对于可转换类型,Java会先将其转换为对应整数类型(int、byte、short),然后再进行匹配判断。如果表达式的类型不符合要求,编译器将报错。
三、switch语句的注意事项
1、case分支的常量值不能重复
如下例子:
int i = 1; switch(i){ case 1: //执行代码块1 break; case 1: //执行代码块2 break; }
由于case常量值重复,编译器将报错。
2、case分支中不能有重复代码
如下例子:
int i = 1; switch(i){ case 1: //执行代码块1 break; case 2: //执行代码块1 break; }
由于case分支存在重复代码,编译器将报错。
3、case分支的顺序
case分支的顺序不会影响表达式的值与常量值的匹配,但是顺序的改变会影响程序的效率。在选择case分支的常量值时,应该把最可能出现的常量值放在前面,以提高程序的效率。
四、示例代码
下面是一个使用switch语句的示例代码:
public class SwitchDemo { public static void main(String[] args) { int month = 8; String monthString; switch (month) { case 1: monthString = "January"; break; case 2: monthString = "February"; break; case 3: monthString = "March"; break; case 4: monthString = "April"; break; case 5: monthString = "May"; break; case 6: monthString = "June"; break; case 7: monthString = "July"; break; case 8: monthString = "August"; break; case 9: monthString = "September"; break; case 10: monthString = "October"; break; case 11: monthString = "November"; break; case 12: monthString = "December"; break; default: monthString = "Invalid month"; break; } System.out.println("Month " + month + " is " + monthString); } }
以上代码是一个根据月份输出月份名称的程序。在switch语句的表达式中,变量month的值为8。根据case分支中的常量值,匹配到case 8分支,执行其中打印字符串的代码块,输出"Month 8 is August"。