除了 if
语句外,还有一种条件判断,switch
是根据某个表达式的结果,分别去执行不同的分支。
例如,在游戏中,让用户选择选项:
- 单人模式
- 多人模式
- 退出游戏
这时,switch
语句就派上用场了。
switch
语句根据switch
(表达式) 计算的结果,跳转到匹配的 case
结果,然后继续执行后续语句,直到遇到 break
结束执行。
public class Main {
public static void main(String[] args) {
int option = 1;
switch (option) {
case 1:
System.out.println("Selected 1");
break;
case 2:
System.out.println("Selected 2");
break;
case 3:
System.out.println("Selected 3");
break;
}
}
}
修改 option
的值分别为1、2、3,观察执行结果。
如果 option
的值没有匹配到任何 case
,例如 option = 99
,那么,switch
语句不会执行任何语句。这时,可以给 switch
语句加一个 default
,当没有匹配到任何 case
时,执行 default
:
public class Main {
public static void main(String[] args) {
int option = 99;
switch (option) {
case 1:
System.out.println("Selected 1");
break;
case 2:
System.out.println("Selected 2");
break;
case 3:
System.out.println("Selected 3");
break;
default:
System.out.println("Not selected");
break;
}
}
}
如果把 switch
语句翻译成 if
语句,那么上述的代码相当于:
if (option == 1) {
System.out.println("Selected 1");
} else if (option == 2) {
System.out.println("Selected 2");
} else if (option == 3) {
System.out.println("Selected 3");
} else {
System.out.println("Not selected");
}
对于多个 ==
判断的情况,使用 switch
结构更加清晰。
同时注意,上述“翻译”只有在 switch
语句中对每个 case
正确编写了 break
语句才能对应得上。
使用 switch
时,注意 case
语句并没有花括号 {}
,而且,case
语句具有“穿透性”,漏写 break
将导致意想不到的结果:
public class Main {
public static void main(String[] args) {
int option = 2;
switch (option) {
case 1:
System.out.println("Selected 1");
case 2:
System.out.println("Selected 2");
case 3:
System.out.println("Selected 3");
default:
System.out.println("Not selected");
}
}
}
当 option = 2
时,将依次输出 Selected 2
、Selected 3
、Not selected
,原因是从匹配到 case 2
开始,后续语句将全部执行,直到遇到 break
语句。因此,任何时候都不要忘记写 break
。
如果有几个 case
语句执行的是同一组语句块,可以这么写:
public class Main {
public static void main(String[] args) {
int option = 2;
switch (option) {
case 1:
System.out.println("Selected 1");
break;
case 2:
case 3:
System.out.println("Selected 2, 3");
break;
default:
System.out.println("Not selected");
break;
}
}
}
使用 switch
语句时,只要保证有 break
,case
的顺序不影响程序逻辑。
但是仍然建议按照自然顺序排列,便于阅读。
switch
语句还可以匹配字符串。字符串匹配时,是比较“内容相等”。例如:
public class Main {
public static void main(String[] args) {
String fruit = "apple";
switch (fruit) {
case "apple":
System.out.println("Selected apple");
break;
case "pear":
System.out.println("Selected pear");
break;
case "mango":
System.out.println("Selected mango");
break;
default:
System.out.println("No fruit selected");
break;
}
}
}