Java Switch 选择结构全解析:从基础到优化的实战指南
一、Switch 结构:高效等值判断的核心工具
在狂神说 Java 第 37 集课程中,我们系统学习了 Switch 选择结构的核心用法。作为 Java 流程控制的重要组成部分,Switch 结构具有以下核心优势:
- 清晰的分支逻辑
- 高效的等值判断
- 支持枚举与字符串匹配
本文将结合课程内容,深度解析 Switch 结构的底层原理与实践技巧。
二、Switch 核心语法
-
多选择结构还有一个实现方式就是switch case 语句。
-
switch case 语句判断一个变量与一系列值中某个值是否相等,每个值称为一个分支。
switch(expression){
case value:
//语句
break;//可选
case value:
//语句
break;//可选
//你可以有任意数量的case语句
default://可选
//语句
}
-
switch 语句中的变量类型可以是:byte、short、int 或者 char。
-
从 Java SE7 开始⚠️
-
switch 支持字符串 String 类型了⚠️
-
同时 case 标签必须为字符串常量或字面量。
1. 基础用法
package struct;
import java.util.Scanner;
public class SwitchDemo01 {
public static void main(String[] args) {
//case穿透 //switch匹配一个具体的值
char grade = 'C';
switch (grade) {
case 'A':
System.out.println("优秀");
break;//可选
case 'B':
System.out.println("良好");
break;//可选
case 'C':
System.out.println("及格");
case 'D':
System.out.println("再接再厉");
break;//可选
case 'E':
System.out.println("挂科");
default:
System.out.println("未知等级");
}
}
}
2. JDK 7 + 增强语法
package struct;
public class SwitchDemo02 {
public static void main(String[] args) {
String name = "狂神";
/*
JDK7的新特性,表达式结果可以是字符串!!
字符的本质还是数字
反编译java---class(字节码文件)----反编译(IDEA)
*/
switch (name) {
case"秦疆":
System.out.println("秦疆");
break;
case "狂神":
System.out.println("狂神");
break;
default:
System.out.println("弄啥嘞!");
}
}
}
3. JDK 14 + 增强语法
int choice = 2;
switch (choice) {
case 1 -> System.out.println("选项1");
case 2 -> System.out.println("选项2");
default -> System.out.println("默认");
}
注意事项:
- 表达式类型支持
byte
/short
/int
/char
/String
/enum
- JDK 14 + 支持箭头语法(
->
) - 分支无需
break
,代码块结束自动跳出
三、Switch 与 if 的对比
1. 适用场景
结构 | 最佳适用场景 | 典型案例 |
---|---|---|
Switch | 等值判断、枚举处理 | 星期选择、状态机 |
if | 复杂条件、范围判断 | 年龄分段、权限验证 |
2. 性能对比
// Switch性能优势场景
for (int i = 0; i < 1000000; i++) {
switch (i % 10) { // 高效等值判断
case 0: ...
}
}
// if性能优势场景
for (int i = 0; i < 1000000; i++) {
if (i < 500000) { // 范围判断
...
}
}
四、高级应用技巧
1. 枚举匹配
enum Color { RED, GREEN, BLUE }
Color color = Color.RED;
switch (color) {
case RED -> System.out.println("红色");
case GREEN -> System.out.println("绿色");
case BLUE -> System.out.println("蓝色");
}
2. 字符串匹配
String fruit = "apple";
switch (fruit) {
case "apple" -> System.out.println("苹果");
case "banana" -> System.out.println("香蕉");
default -> System.out.println("其他");
}
五、常见错误与解决方案
1. 穿透行为
错误示例:
int num = 2;
switch (num) {
case 1:
System.out.println("1");
case 2: // 缺少break导致穿透⚠️
System.out.println("2");
default:
System.out.println("default");
}
解决方案:
// JDK 14+语法
switch (num) {
case 1 -> System.out.println("1");
case 2 -> System.out.println("2");
default -> System.out.println("default");
}
2. 类型不匹配
错误示例:
long id = 100L;
switch (id) { // 不支持long类型⚠️
case 100L -> System.out.println("匹配");
}
解决方案:
int id = 100;
switch (id) {
case 100 -> System.out.println("匹配");
}
六、最佳实践总结
-
优先使用枚举:
// 推荐做法 switch (user.getRole()) { case ADMIN -> ... case USER -> ... }
-
避免复杂逻辑:
// 反模式 case 1: if (condition) { ... } break; // 推荐做法 if (condition) { switch (choice) { ... } }
-
明确 default 分支:
switch (status) { case SUCCESS -> ... case FAIL -> ... default -> throw new IllegalArgumentException("无效状态"); }
七、高频面试题解析
1. Switch 支持哪些数据类型?
- JDK 1.7+:
byte
/short
/int
/char
/String
/enum
- 不支持:
long
/double
/boolean
2. 如何实现类似 if 的范围匹配?
int score = 85;
switch (score / 10) {
case 10, 9 -> System.out.println("优秀");
case 8 -> System.out.println("良好");
default -> System.out.println("需努力");
}
八、学习资源推荐
九、总结与互动
通过本文的学习,您将掌握:
- 3 种 Switch 语法的核心用法
- JDK 14 + 的增强特性
- 与 if 结构的选择策略
- 常见错误的解决方案
疑问引导:您在使用 Switch 时遇到过哪些难以解决的问题?例如:
- 穿透行为导致的逻辑错误?
- 枚举与字符串匹配的性能问题?
欢迎在评论区分享您的解决方案