文章目录

Java 条件语句:if-else 与 switch-case

发布于 2026-04-02 16:53:19 · 浏览 11 次 · 评论 0 条

Java 中的条件语句用于根据不同的判断结果执行不同的代码块。掌握 if-elseswitch-case 的使用方法,能让你写出逻辑清晰、结构合理的程序。


使用 if-else 语句做判断

if-else 是最基础的条件控制结构,适用于布尔表达式(即结果为 truefalse 的判断)。

  1. 编写一个 if 语句:在 if 后面用圆括号 () 包裹判断条件,大括号 {} 包裹要执行的代码。

    if (score >= 60) {
        System.out.println("及格");
    }
  2. 添加 else 分支处理不满足条件的情况:

    if (score >= 60) {
        System.out.println("及格");
    } else {
        System.out.println("不及格");
    }
  3. 串联多个条件时,使用 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("不及格");
    }

    注意:条件从上到下依次判断,一旦某个条件成立,后续分支不再执行。

  4. 避免常见错误

    • 不要在 if 条件后加分号,例如 if (x > 0); 会导致逻辑错误。
    • 多行代码必须用 {} 包裹,即使只有一行,也建议始终使用大括号以提高可读性和避免 bug。

使用 switch-case 语句做多路选择

当需要根据一个变量的具体值进行多分支选择时,switch-case 更简洁高效。

  1. 确定要判断的变量类型:switch 支持 byteshortintcharString(Java 7 起)、枚举类型,但不支持 longfloatdouble 或布尔类型。

  2. 编写基本结构:

    switch (grade) {
        case "A":
            System.out.println("优秀");
            break;
        case "B":
            System.out.println("良好");
            break;
        case "C":
            System.out.println("及格");
            break;
        default:
            System.out.println("无效等级");
    }
  3. 每个 case 后通常加上 break:防止“穿透”(fall-through)到下一个 case。如果不写 break,程序会继续执行后续所有 case 代码,直到遇到 breakswitch 结束。

    // 示例:故意利用穿透实现多个值共用逻辑
    switch (month) {
        case 12:
        case 1:
        case 2:
            System.out.println("冬季");
            break;
        case 3:
        case 4:
        case 5:
            System.out.println("春季");
            break;
        // 其他季节...
    }
  4. 使用 default 处理未匹配的情况:它可放在任意位置,但习惯上放在最后。

  5. 注意字符串比较switchString 的比较是基于 .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 反而增加冗余步骤。


注意事项与最佳实践

  1. 保持条件简单:避免在 ifcase 中写过于复杂的表达式。可提前将逻辑提取为布尔变量。

    boolean isWeekend = day.equals("Saturday") || day.equals("Sunday");
    if (isWeekend) { ... }
  2. switch 中的 case 值必须是编译时常量:不能是变量或运行时计算结果。

    final int OPTION_A = 1;
    int x = 2;
    switch (input) {
        case OPTION_A: // ✅ 合法(final 常量)
        case x:        // ❌ 编译错误
    }
  3. Java 14+ 支持 switch 表达式(推荐新项目使用)

    String result = switch (grade) {
        case "A" -> "优秀";
        case "B" -> "良好";
        case "C" -> "及格";
        default -> "无效";
    };

    此语法自动避免穿透,且可作为表达式返回值,更安全简洁。

  4. 优先使用卫语句(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-elseswitch-case,能让代码逻辑一目了然,减少 bug 并提升可维护性。

评论 (0)

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

扫一扫,手机查看

扫描上方二维码,在手机上查看本文