条件判断应优先安排高概率为真、计算开销小、能快速排除的条件;善用短路逻辑;多分支场景优先选用switch或查表优化。

条件判断的先后顺序直接影响执行效率,核心原则是:让高概率为真、计算开销小、能快速排除的条件优先判断。
把高频成立的条件放前面
程序运行中,如果某个条件在大多数情况下都为真,把它放在 if 链最前面,能减少后续条件的判断次数。例如用户登录校验中,“token 未过期”比“权限等级 ≥ 3”更常成立,就应先判断前者。这样多数请求在第一步就进入主逻辑,避免无谓的后续检查。
把轻量级判断放前面
把不涉及函数调用、不访问内存或磁盘、不触发网络请求的条件前置。比如 a > 0 比 isValidUser(id) 快得多。后者可能查数据库或远程服务,一旦前置且结果为假,就能跳过所有重量级操作。常见组合如:
- 先判断 obj != null,再调用 obj.getName()
- 先判断 list.size() > 0,再遍历 list.get(0)
- 先判断 status == ACTIVE(枚举值比较),再执行复杂状态机校验
用短路逻辑合并多个条件
利用 && 和 || 的短路特性,控制执行路径。例如 if (x != null && x.isValid() && x.hasPermission()) 中,只要 x 为 null,后面两个方法根本不会调用。反过来,若写成 if (x.hasPermission() && x.isValid() && x != null),可能直接抛出空指针异常。注意:顺序不能仅按业务逻辑排列,必须兼顾安全性和性能。
对多分支场景考虑 switch 或查找表
当判断依据是单一变量且取值离散(如状态码、类型标识、枚举),用 switch 通常比一长串 else if 更快——编译器可能生成跳转表,实现 O(1) 分支定位。若分支数多、条件复杂但可预计算,还可构建 Map 或数组做键值映射,把运行时判断转为查表操作,尤其适合配置驱动或规则引擎类逻辑。

















