下面是一份系统化讲解的 Java 分支结构(if 与 switch)详解,从基础到进阶一步讲清 👇
一、什么是分支结构?
分支结构用于根据条件选择执行不同代码路径。
👉 核心思想:
“条件成立 → 执行A,否则 → 执行B”
二、if 语句(最常用)
1️⃣ 基本结构
if (条件) {
// 条件为 true 执行
}
例子:
int age = 18;
if (age >= 18) {
System.out.println("成年人");
}
2️⃣ if – else
if (条件) {
// true
} else {
// false
}
例子:
if (age >= 18) {
System.out.println("成年人");
} else {
System.out.println("未成年人");
}
3️⃣ if – else if – else(多分支)
if (条件1) {
} else if (条件2) {
} else if (条件3) {
} else {
}
例子:
int score = 85;
if (score >= 90) {
System.out.println("优秀");
} else if (score >= 80) {
System.out.println("良好");
} else if (score >= 60) {
System.out.println("及格");
} else {
System.out.println("不及格");
}
4️⃣ 嵌套 if
if (条件1) {
if (条件2) {
// 嵌套逻辑
}
}
例子:
if (age >= 18) {
if (age < 60) {
System.out.println("在职年龄");
}
}
⚠️ if 使用注意点
① 条件必须是 boolean
if (1) // ❌ 错误(Java不允许)
② 大括号建议不省略
if (age > 18)
System.out.println("A");
System.out.println("B"); // ⚠️ 实际不会受if控制
③ 判断顺序很重要(性能 + 正确性)
if (obj != null && obj.length() > 0)
三、switch 语句(多值判断)
1️⃣ 基本结构(传统写法)
switch (表达式) {
case 值1:
// 代码
break;
case 值2:
// 代码
break;
default:
// 默认
}
例子:
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("其他");
}
2️⃣ break 的作用(重点)
👉 防止“贯穿(fall-through)”
int x = 2;
switch (x) {
case 1:
System.out.println("1");
case 2:
System.out.println("2");
case 3:
System.out.println("3");
}
输出:
2
3
👉 因为没有 break
3️⃣ 多 case 合并
switch (day) {
case 1:
case 2:
case 3:
System.out.println("工作日");
break;
case 6:
case 7:
System.out.println("周末");
break;
}
4️⃣ 支持的数据类型
支持:
- byte / short / int / char
- String(Java 7+)
- enum
❌ 不支持:
switch (1.5) // double ❌
5️⃣ switch 新写法(Java 12+ 推荐🔥)
更简洁:
int day = 3;
switch (day) {
case 1 -> System.out.println("周一");
case 2 -> System.out.println("周二");
case 3 -> System.out.println("周三");
default -> System.out.println("其他");
}
6️⃣ switch 表达式(可返回值)
int day = 3;
String result = switch (day) {
case 1 -> "周一";
case 2 -> "周二";
case 3 -> "周三";
default -> "其他";
};
四、if vs switch(核心对比)
| 对比点 | if | switch |
|---|---|---|
| 判断类型 | 任意 boolean 表达式 | 固定值匹配 |
| 范围判断 | ✅ 支持(如 > <) | ❌ 不支持 |
| 多值判断 | ❌ 冗长 | ✅ 简洁 |
| 可读性 | 复杂条件更清晰 | 多分支更清晰 |
| 性能 | 一般 | 多分支更优(可能优化为跳表) |
五、什么时候用 if?什么时候用 switch?
✅ 用 if 的场景
- 范围判断(如成绩区间)
- 复杂逻辑条件(&&、||)
- 非固定值判断
👉 示例:
if (score >= 90)
✅ 用 switch 的场景
- 固定值匹配(菜单、状态码)
- 多个离散值
👉 示例:
switch (status)
六、常见坑(面试重点)
❌ 1. 忘写 break
👉 导致 case 穿透
❌ 2. case 必须是常量
int a = 1;
case a: // ❌ 错误(必须是常量)
❌ 3. switch 不能做范围判断
case score > 90: // ❌ 错误
❌ 4. if 判断顺序错误
if (score >= 60)
else if (score >= 80) // ❌ 永远不会执行
七、进阶技巧(精通关键)
⭐ 1. switch + 枚举(强烈推荐)
enum Day { MON, TUE, WED }
switch (day) {
case MON -> System.out.println("周一");
}
⭐ 2. switch 替代 if 链(提升性能 + 可读性)
⭐ 3. 利用“贯穿”做简化逻辑
(高级技巧)
case 1:
case 2:
case 3:
八、总结一句话
👉 if 和 switch 的本质区别:
if 用来“判断条件”,switch 用来“匹配值”
如果你想继续进阶,我可以帮你👇
✅ 出一套「if & switch 面试高频题」
✅ 或做「代码改错专项训练(超有用)」