程序的十字路口:一文彻底搞懂分支结构(if & switch)

📝 前言:在程序的世界里,代码并不总是从上到下一成不变地“直线奔跑”。很多时候,程序需要根据不同的情况做出不同的选择,就像我们走到十字路口需要根据红绿灯决定是走是停一样。这就是今天我们要探讨的核心——分支结构(选择结构)

本文将从最基础的if语句出发,一路打怪升级到switch,并分享一些日常开发中的避坑经验代码规范。干货满满,建议收藏!⭐

🌟 一、 什么是分支结构?

在编程中,三大基本结构分别是:顺序结构、分支结构、循环结构。

  • 顺序结构:代码从上到下依次执行(默认情况)。
  • 分支结构:根据条件判断的结果,选择性地执行某段代码。

分支结构的灵魂在于条件判断,在Java/C等语言中,条件表达式的结果必须是一个布尔值true 或 false)。

🛤️ 二、 if 分支家族

if家族是最常用的分支结构,它有三种形态:单分支、双分支、多分支。

1. 单分支:如果…就… (if)

当你只有一个条件需要满足时使用。满足就执行,不满足就跳过。

// 语法
if (条件表达式) {
    // 条件为 true 时执行的代码
}

// 示例:如果下雨,就带伞
boolean isRaining = true;
if (isRaining) {
    System.out.println("外面下雨了,记得带伞!");
}

2. 双分支:如果…否则… (if-else)

非黑即白的选择。条件满足走A逻辑,不满足走B逻辑。

// 语法
if (条件表达式) {
    // 条件为 true 时执行
} else {
    // 条件为 false 时执行
}

// 示例:判断奇偶数
int num = 10;
if (num % 2 == 0) {
    System.out.println(num + "是偶数");
} else {
    System.out.println(num + "是奇数");
}

3. 多分支:如果…否则如果…否则… (if - else if - else)

面对多个条件判断时,按顺序从上往下判断,只要有一个条件满足,执行完毕后就会跳出整个if结构

// 语法
if (条件1) {
    // 满足条件1执行
} else if (条件2) {
    // 满足条件2执行
} else if (条件3) {
    // 满足条件3执行
} else {
    // 以上条件都不满足时执行(可省略,但建议保留作为兜底逻辑)
}

// 示例:成绩评级
int score = 85;
if (score >= 90) {
    System.out.println("优秀");
} else if (score >= 80) {
    System.out.println("良好"); // 执行这里后,直接跳出整个if
} else if (score >= 60) {
    System.out.println("及格");
} else {
    System.out.println("不及格");
}

⚠️ 避坑指南1else if 的顺序非常重要!如果把上面例子中 score >= 60 放在第一个判断,那么85分也会被判定为“及格”。多分支判断必须注意条件之间的互斥性和顺序

🔀 三、 switch 分支:精准匹配

当你需要对一个具体的值进行多路匹配时,switchif-else if看起来更清爽。

1. 基本语法与示例

// 示例:根据星期几输出日程
int day = 3;
switch (day) {
    case 1:
        System.out.println("周一:开会");
        break;
    case 2:
        System.out.println("周二:写代码");
        break;
    case 3:
        System.out.println("周三:改Bug"); // 匹配成功
        break;
    // ...省略其他天
    default:
        System.out.println("休息日");
        break;
}

2. switch 的三大铁律

  1. 支持的类型:在Java中,switch支持 byte, short, int, char, String(Java7+), 枚举不支持 long, float, double 及 boolean
  2. break 不能忘:如果漏写了break,会发生穿透现象(Fall-through),程序会无条件执行后续的case代码,直到遇到break为止。
  3. default 的位置default可以放在任何位置,但习惯上放在最后。它的作用类似于if-else中的else

💡 巧妙利用穿透:有时候穿透不是Bug而是Feature!比如判断季节:

int month = 5;
switch (month) {
    case 3: case 4: case 5:
        System.out.println("春季");
        break;
    case 6: case 7: case 8:
        System.out.println("夏季");
        break;
    // ...
}

⚔️ 四、 if vs switch:到底用哪个?

比较维度 if-else switch
判断条件 布尔表达式(范围、大小判断) 具体的常量值(等值判断)
适用场景 区间判断、复杂逻辑判断 离散值的多路匹配(如菜单选择、星期)
底层效率 逐条判断,效率逐渐降低 底层通过跳转表实现,效率恒定(JVM优化)
代码可读性 嵌套过多时容易变成“波纹状” 结构清晰,一目了然

总结口诀

  • 等值判断用 switch,区间判断用 if
  • 能用 switch 的场景一定能用 if,反之不然。

🚀 五、 进阶:如何写出优雅的分支代码?

在实际开发中,嵌套过深的 if-else 被称为“箭头代码”(缩进越来越深,形如箭头 >),极其难以阅读。这里分享两个优化技巧:

1. 卫语句提前返回

反面教材

public void process(Order order) {
    if (order != null) {
        if (order.isPaid()) {
            if (order.hasStock()) {
                // 核心业务逻辑(嵌套太深)
                System.out.println("开始发货...");
            } else {
                System.out.println("库存不足");
            }
        } else {
            System.out.println("订单未支付");
        }
    } else {
        System.out.println("订单不存在");
    }
}

优化后(提前Return,拒绝嵌套)

public void process(Order order) {
    if (order == null) {
        System.out.println("订单不存在");
        return; // 提前阻断
    }
    if (!order.isPaid()) {
        System.out.println("订单未支付");
        return;
    }
    if (!order.hasStock()) {
        System.out.println("库存不足");
        return;
    }
    
    // 核心业务逻辑(只有一层缩进,清爽!)
    System.out.println("开始发货...");
}

2. 永远加上大括号 {}

哪怕 if 里面只有一行代码,也必须加上 {}。这不仅是为了规范,更是为了防止后续维护时添加代码造成的逻辑错误(著名的苹果SSL漏洞就是这么来的)。

// 极度危险!不要这样写!
if (condition)
    doSomething();

// 规范写法
if (condition) {
    doSomething();
}

🎯 总结

  1. if 是分支结构的主力,适用于所有条件判断;switch 是等值匹配的利器,注意别忘了 break
  2. 多分支 if-else if 要注意条件顺序;switch 不支持浮点型和长整型。
  3. 实际开发中,要警惕深层嵌套,使用卫语句提前 return 优化代码结构。
  4. 好习惯:永远写上大括号 {}

💬 互动时间:你在开发中遇到过最离谱的 if-else 嵌套有几层?欢迎在评论区吐槽分享!如果觉得本文对你有帮助,别忘了点赞👍 + 关注❤️哦!

💡 给你的发布小贴士(发布前必看):

  1. 替换代码语言:如果你主要写C/C++,把代码块里的 java 换成 c,把 System.out.println 换成 printf,把 boolean 换成 bool 即可。
  2. 封面图:在CSDN发布时,加一张好看的封面图(比如一个岔路口的图片,或者代码截图)会大大增加点击率。
  3. 标签设置:在CSDN发布时,添加标签:Java基础初学者分支结构if-else编程思维,有助于获得更多系统推荐流量。

更多推荐