短路逻辑运算符(&& 和 ||)通过跳过无用分支提升效率:&& 左为 false 时右不执行,|| 左为 true 时右不执行;应将轻量、高概率失败条件置左,并避免依赖右侧副作用。

短路逻辑运算符(&& 和 ||)能显著提升执行效率,关键在于它们“不计算无用分支”——一旦结果已确定,就跳过后续表达式求值。
避免冗余计算和副作用
当左侧表达式已足以决定整体布尔结果时,右侧不会执行。这直接省去函数调用、数据库查询或复杂判断的开销。
- &&:左侧为 false 时,右侧完全不执行
- ||:左侧为 true 时,右侧完全不执行
例如:if (user != null && user.isActive()) 中,若 user 为 null,user.isActive() 就不会触发,既防空指针又省一次方法调用。
把高概率/低成本条件放左边
短路效果依赖顺序。把更轻量、更可能提前终止的判断前置,能让更多分支被跳过。
- 优先检查
obj != null,再调用obj.method() - 先判断
list.size() > 0,再访问list.get(0) - 把常量或字段读取(快)放在左边,把 I/O 或远程调用(慢)放在右边
替代嵌套 if,提升可读性与性能
多个守卫条件用 && 连接,比层层缩进更简洁,也天然具备短路优势。
❌ 不推荐:
if (user != null) {
if (user.isVerified()) {
if (user.getBalance() > 100) {
processPayment();
}
}
}
✅ 推荐:
if (user != null && user.isVerified() && user.getBalance() > 100) {
processPayment();
}
不仅代码扁平,而且任一条件失败就立即退出,后面逻辑全跳过。
注意副作用陷阱
短路虽高效,但若右侧有必须执行的副作用(如日志、计数、状态变更),就不能依赖它来保证运行。
- 错误写法:
isValid() && logAccess();——logAccess()可能不执行 - 正确做法:把副作用拆到独立语句,或明确用
if (isValid()) { logAccess(); ... }

















