条件判断顺序优化的核心是让高概率、低开销的条件优先执行:if-else链前置高频分支,复合条件左侧放低成本子表达式,离散值匹配优先用switch替代长if-else链。

条件判断顺序直接影响执行效率,尤其在多分支、高频调用的代码中。优化核心是:让概率高、计算快的条件优先判断,减少不必要的表达式求值和逻辑开销。
把高概率条件放在前面
Java 的 if-else 链是顺序执行的,一旦某个条件为 true,后续分支就不再检查。所以应把最常满足的分支前置,降低平均判断次数。
- 例如用户角色校验:若 80% 请求来自普通用户,应先写
if (role == Role.USER),而不是先判断管理员或访客 - 避免“小概率前置”陷阱:如把
if (id == null)放在最后,可能让大量非空 id 多走几轮比较才命中
把低成本条件放在左边和前面
复合条件(如 && 或 ||)遵循短路求值规则,且从左到右依次计算。应把计算开销小、不易抛异常的子表达式放左侧。
- 推荐:
if (obj != null && obj.isActive() && obj.getLevel() > 5)—— 先判空(快),再调方法(可能慢或有副作用) - 不推荐:
if (obj.isActive() && obj != null)—— 若obj为 null,isActive()会直接 NPE,且无法利用短路跳过
用 switch 替代长 if-else if 链(适用于离散值匹配)
当判断的是同一变量的多个常量值(如 int、String、enum),Java 编译器对 switch 会生成跳转表(tableswitch)或二分查找(lookupswitch),时间复杂度接近 O(1);而 if-else 链最坏是 O(n)。
立即学习“Java免费学习笔记(深入)”;
- 适用场景:状态码处理(
status == 200 || 404 || 500)、枚举分发、固定字符串路由(Java 7+ 支持 String) - 注意:不要对浮点数、null 值或范围型判断(如
x > 10 && x )强行用 switch
提前返回,减少嵌套与冗余判断
在方法内部,尽早用 if-return 排除异常或边界情况,比层层嵌套更清晰也更高效。
- 好写法:
if (list == null || list.isEmpty()) return;—— 一次判断结束流程 - 差写法:用 if-else 包裹全部业务逻辑,即使多数调用都因空集合提前退出,仍要多进一层作用域
- 额外收益:降低圈复杂度,提升可读性与可测性



















