Java switch case
当程序需要"根据一个变量的不同取值走不同分支"时,用一长串 else if 会显得啰嗦;switch 语句让这种多路选择一目了然,常用于菜单、星期、状态分发等场景。
switch 基本语法
先计算括号内表达式的值,再从上到下与各 case 比对,命中就执行该分支;全都不命中时执行 default。switch 支持 byte、short、int、char、String 与枚举类型。
public class SwitchDemo {
public static void main(String[] args) {
int day = 3;
switch (day) {
case 1:
System.out.println("星期一");
break;
case 3:
System.out.println("星期三"); // 输出:星期三
break;
default:
System.out.println("其他日子");
}
}
}
case 贯穿与 break
每个 case 结尾要写 break,否则执行完会继续"贯穿"到后面的 case,多数情况下需要避免。
// 片段需放进 main 方法中运行
int n = 2;
switch (n) {
case 1:
System.out.println("一");
case 2:
System.out.println("二"); // 输出:二
case 3:
System.out.println("三"); // 输出:三(没写 break,贯穿执行)
}
合并 case:月份天数
"贯穿"也可以反过来利用:让多个 case 共享同一段代码,例如判断月份天数。
// 片段需放进 main 方法中运行
int month = 2;
switch (month) {
case 1: case 3: case 5: case 7: case 8: case 10: case 12:
System.out.println("31 天");
break;
case 2:
System.out.println("28 或 29 天"); // 输出:28 或 29 天
break;
default:
System.out.println("30 天");
}
JDK7 起可以判断 String
case 后面直接写字符串字面量即可,比较的是字符串内容。
// 片段需放进 main 方法中运行
String fruit = "苹果";
switch (fruit) {
case "苹果":
System.out.println("一个苹果"); // 输出:一个苹果
break;
default:
System.out.println("没有这种水果");
}
完整示例:星期几
用变量 day 模拟输入,完整跑一遍 switch 的分发流程。
public class WeekDemo {
public static void main(String[] args) {
int day = 5;
switch (day) {
case 1: System.out.println("星期一"); break;
case 2: System.out.println("星期二"); break;
case 3: System.out.println("星期三"); break;
case 4: System.out.println("星期四"); break;
case 5: System.out.println("星期五"); break;
case 6: System.out.println("星期六"); break;
case 7: System.out.println("星期日"); break;
default: System.out.println("输入无效");
}
}
}
小结:switch 适合"对少量固定取值做分发",记得给每个 case 加 break,并用 default 兜底;需要范围判断或复杂条件时,仍应选用 if 系列语句。