Java 中的条件语句用于根据不同的判断结果执行不同的代码块。掌握 if-else 和 switch-case 的使用方法,能让你写出逻辑清晰、结构合理的程序。
使用 if-else 语句做判断
if-else 是最基础的条件控制结构,适用于布尔表达式(即结果为 true 或 false 的判断)。
-
编写一个
if语句:在if后面用圆括号()包裹判断条件,大括号{}包裹要执行的代码。if (score >= 60) { System.out.println("及格"); } -
添加
else分支处理不满足条件的情况:if (score >= 60) { System.out.println("及格"); } else { System.out.println("不及格"); } -
串联多个条件时,使用
else if:if (score >= 90) { System.out.println("优秀"); } else if (score >= 80) { System.out.println("良好"); } else if (score >= 60) { System.out.println("及格"); } else { System.out.println("不及格"); }注意:条件从上到下依次判断,一旦某个条件成立,后续分支不再执行。
-
避免常见错误:
- 不要在
if条件后加分号,例如if (x > 0);会导致逻辑错误。 - 多行代码必须用
{}包裹,即使只有一行,也建议始终使用大括号以提高可读性和避免 bug。
- 不要在
使用 switch-case 语句做多路选择
当需要根据一个变量的具体值进行多分支选择时,switch-case 更简洁高效。
-
确定要判断的变量类型:
switch支持byte、short、int、char、String(Java 7 起)、枚举类型,但不支持long、float、double或布尔类型。 -
编写基本结构:
switch (grade) { case "A": System.out.println("优秀"); break; case "B": System.out.println("良好"); break; case "C": System.out.println("及格"); break; default: System.out.println("无效等级"); } -
每个
case后通常加上break:防止“穿透”(fall-through)到下一个case。如果不写break,程序会继续执行后续所有case代码,直到遇到break或switch结束。// 示例:故意利用穿透实现多个值共用逻辑 switch (month) { case 12: case 1: case 2: System.out.println("冬季"); break; case 3: case 4: case 5: System.out.println("春季"); break; // 其他季节... } -
使用
default处理未匹配的情况:它可放在任意位置,但习惯上放在最后。 -
注意字符串比较:
switch对String的比较是基于.equals()方法,而非引用比较,因此安全可靠。
如何选择 if-else 还是 switch-case?
两者功能有重叠,但适用场景不同。下表帮助你快速决策:
| 判断依据 | 推荐结构 |
|---|---|
条件是范围判断(如 x > 10)或复杂逻辑(如 a && !b) |
if-else |
| 判断一个变量是否等于若干个固定值(尤其是整数或字符串) | switch-case |
| 分支数量少(≤ 2) | if-else 更直接 |
| 分支数量多(≥ 4)且值明确 | switch-case 更清晰、性能略优 |
switch-case 在编译后可能生成跳转表(tableswitch 或 lookupswitch),在分支多时比 if-else 链式判断更快。但对于少量分支或非等值判断,if-else 更灵活。
实战示例:成绩评级系统
假设输入一个 0–100 的整数分数,输出对应等级:
public class GradeEvaluator {
public static void main(String[] args) {
int score = 85;
// 方法一:使用 if-else(适合范围判断)
if (score < 0 || score > 100) {
System.out.println("分数无效");
} else if (score >= 90) {
System.out.println("A");
} else if (score >= 80) {
System.out.println("B");
} else if (score >= 70) {
System.out.println("C");
} else if (score >= 60) {
System.out.println("D");
} else {
System.out.println("F");
}
// 方法二:先转换为等级字符,再用 switch(仅作对比)
char level;
if (score >= 90) level = 'A';
else if (score >= 80) level = 'B';
else if (score >= 70) level = 'C';
else if (score >= 60) level = 'D';
else level = 'F';
switch (level) {
case 'A': System.out.println("优秀"); break;
case 'B': System.out.println("良好"); break;
case 'C': System.out.println("中等"); break;
case 'D': System.out.println("及格"); break;
case 'F': System.out.println("不及格"); break;
}
}
}
此例中,第一种方法更合理,因为原始数据是数值范围,强行转成 switch 反而增加冗余步骤。
注意事项与最佳实践
-
保持条件简单:避免在
if或case中写过于复杂的表达式。可提前将逻辑提取为布尔变量。boolean isWeekend = day.equals("Saturday") || day.equals("Sunday"); if (isWeekend) { ... } -
switch 中的 case 值必须是编译时常量:不能是变量或运行时计算结果。
final int OPTION_A = 1; int x = 2; switch (input) { case OPTION_A: // ✅ 合法(final 常量) case x: // ❌ 编译错误 } -
Java 14+ 支持 switch 表达式(推荐新项目使用):
String result = switch (grade) { case "A" -> "优秀"; case "B" -> "良好"; case "C" -> "及格"; default -> "无效"; };此语法自动避免穿透,且可作为表达式返回值,更安全简洁。
-
优先使用卫语句(guard clause)简化嵌套:
// 不推荐:深层嵌套 if (user != null) { if (user.isActive()) { if (user.hasPermission()) { doSomething(); } } } // 推荐:提前返回 if (user == null) return; if (!user.isActive()) return; if (!user.hasPermission()) return; doSomething();
合理运用 if-else 和 switch-case,能让代码逻辑一目了然,减少 bug 并提升可维护性。

暂无评论,快来抢沙发吧!