全部学科
NodeJS全栈
nodejs
Python全栈
python
小程序首页
📅 2026-05-09 6 分钟 ✍️ juanwangdev

switch语句

switch是多分支选择结构。

switch基本语法

switch结构

Java
switch (表达式) {
    case 值1:
        // 执行代码
        break;
    case 值2:
        // 执行代码
        break;
    default:
        // 默认执行代码
}

基本示例

Java
int day = 3;

switch (day) {
    case 1:
        System.out.println("星期一");
        break;
    case 2:
        System.out.println("星期二");
        break;
    case 3:
        System.out.println("星期三");
        break;
    default:
        System.out.println("其他");
}
// 输出:星期三

switch执行流程

执行过程

Java
1. 计算switch表达式的值
2. 从上到下匹配case值
3. 找到匹配的case,执行其代码
4. 遇到break跳出switch
5. 无匹配则执行default

break的作用

Java
int num = 2;

switch (num) {
    case 1:
        System.out.println("一");
        break;  // 跳出switch
    case 2:
        System.out.println("二");
        break;  // 跳出switch
    case 3:
        System.out.println("三");
        break;
}
// 输出:二(遇到break停止)

穿透现象(无break)

Java
int num = 2;

switch (num) {
    case 1:
        System.out.println("一");
    case 2:
        System.out.println("二");  // 无break,继续执行
    case 3:
        System.out.println("三");
}
// 输出:二、三(穿透执行)

无break会继续执行后续case代码,直到遇到break或switch结束。

switch支持类型

支持的类型

  • byte、short、int、char
  • String(Java 7+)
  • enum(枚举)
Java
// int类型
int num = 1;
switch (num) {
    case 1: break;
    case 2: break;
}

// char类型
char grade = 'A';
switch (grade) {
    case 'A': break;
    case 'B': break;
}

// String类型(Java 7+)
String name = "张三";
switch (name) {
    case "张三": break;
    case "李四": break;
}

// enum枚举
enum Color { RED, GREEN, BLUE }
Color color = Color.RED;
switch (color) {
    case RED: break;
    case GREEN: break;
}

不支持的类型

Java
// 错误:不支持boolean
// boolean flag = true;
// switch (flag) { }  // 编译错误

// 错误:不支持double
// double d = 1.5;
// switch (d) { }  // 编译错误

// 错误:不支持long
// long l = 100L;
// switch (l) { }  // 编译错误

case合并

多个case共享代码

Java
int month = 2;

switch (month) {
    case 1: case 2: case 3:
        System.out.println("第一季度");
        break;
    case 4: case 5: case 6:
        System.out.println("第二季度");
        break;
    case 7: case 8: case 9:
        System.out.println("第三季度");
        break;
    case 10: case 11: case 12:
        System.out.println("第四季度");
        break;
}

case合并示例

Java
char grade = 'B';

switch (grade) {
    case 'A': case 'B': case 'C':
        System.out.println("通过");
        break;
    case 'D': case 'F':
        System.out.println("未通过");
        break;
    default:
        System.out.println("无效等级");
}

default默认分支

default作用

无匹配case时执行default。

Java
int num = 5;

switch (num) {
    case 1:
        System.out.println("一");
        break;
    case 2:
        System.out.println("二");
        break;
    default:
        System.out.println("其他数字");  // 执行default
}

default位置

Java
// default可在任意位置(建议放最后)
int num = 5;

switch (num) {
    default:
        System.out.println("其他");
        break;  // 需要break,否则穿透
    case 1:
        System.out.println("一");
        break;
}

// 推荐:放在最后
switch (num) {
    case 1: break;
    case 2: break;
    default: break;  // 最后可省略break
}

Java 14+新语法

箭头语法

Java
int day = 3;

// 箭头语法:无需break
switch (day) {
    case 1 -> System.out.println("星期一");
    case 2 -> System.out.println("星期二");
    case 3 -> System.out.println("星期三");
    default -> System.out.println("其他");
}

// 箭头语法代码块
switch (day) {
    case 1 -> {
        System.out.println("星期一");
        doSomething();
    }
    case 2 -> System.out.println("星期二");
    default -> System.out.println("其他");
}

多值匹配

Java
int month = 2;

// Java 14+:多值匹配
switch (month) {
    case 1, 2, 3 -> System.out.println("第一季度");
    case 4, 5, 6 -> System.out.println("第二季度");
    case 7, 8, 9 -> System.out.println("第三季度");
    case 10, 11, 12 -> System.out.println("第四季度");
}

switch表达式返回值

Java
int day = 3;

// switch表达式返回结果
String name = switch (day) {
    case 1 -> "星期一";
    case 2 -> "星期二";
    case 3 -> "星期三";
    default -> "其他";
};

// 使用yield返回(块内)
String name2 = switch (day) {
    case 1 -> "星期一";
    case 2 -> {
        String result = "星期二";
        yield result;  // yield返回结果
    }
    default -> "其他";
};

switch应用示例

星期判断

Java
int day = 3;
String dayName;

switch (day) {
    case 1: dayName = "星期一"; break;
    case 2: dayName = "星期二"; break;
    case 3: dayName = "星期三"; break;
    case 4: dayName = "星期四"; break;
    case 5: dayName = "星期五"; break;
    case 6: dayName = "星期六"; break;
    case 7: dayName = "星期日"; break;
    default: dayName = "无效"; break;
}

季节判断

Java
int month = 7;

switch (month) {
    case 3: case 4: case 5:
        System.out.println("春季");
        break;
    case 6: case 7: case 8:
        System.out.println("夏季");
        break;
    case 9: case 10: case 11:
        System.out.println("秋季");
        break;
    case 12: case 1: case 2:
        System.out.println("冬季");
        break;
}

命令处理

Java
String command = "start";

switch (command) {
    case "start":
        startService();
        break;
    case "stop":
        stopService();
        break;
    case "restart":
        stopService();
        startService();
        break;
    default:
        System.out.println("未知命令");
}

switch与if-else对比

对比选择

特性switchif-else
判断方式值匹配条件判断
支持类型有限类型boolean表达式
分支数量多固定值分支好复杂条件好
性能多分支略高灵活
穿透可利用穿透无穿透
Java
// 适合switch:固定值匹配
switch (day) {
    case 1: case 2: case 3: ...
}

// 适合if-else:范围判断、复杂条件
if (score >= 90) {
    ...
} else if (score >= 80) {
    ...
}

switch注意事项

case值必须常量

Java
int num = 2;
int value = 1;

// 正确:case值是常量
switch (num) {
    case 1: break;
    case 2: break;
}

// 错误:case值不能是变量
// switch (num) {
//     case value: break;  // 编译错误
// }

case值不能重复

Java
// 错误:case值重复
// switch (num) {
//     case 1: break;
//     case 1: break;  // 编译错误:重复
// }

不要忘记break

text
// 常见错误:忘记break导致穿透
switch (num) {
    case 1:
        System.out.println("一");
        // 忘记break,继续执行
    case 2:
        System.out.println("二");  // 也被执行
        break;
}

要点总结

  • switch根据表达式值匹配case执行
  • 支持byte/short/int/char/String/enum
  • break跳出switch,无break会穿透
  • default处理无匹配情况
  • case可合并共享代码
  • case值必须是常量,不能重复
  • 不支持boolean/long/double/float
  • Java 14+支持箭头语法、多值匹配
  • Java 14+switch可返回值
  • 固定值匹配用switch,范围判断用if-else
  • 注意忘记break导致穿透问题

📝 发现内容有误?点击此处直接编辑

← 上一篇 if-else语句
下一篇 → while循环
想查看更多题目和详细解析?
小程序提供完整的题库、模拟考试和详细解析
马上就来

长按或扫描二维码,立即体验

扫码体验小程序
马上就来
使用微信扫描二维码
立即体验完整题库