短路特性指Java中&&和||在确定结果后跳过右侧表达式计算,而&和|总是执行两侧;它可防止空指针、避免无效计算、控制副作用,日常应优先使用&&和||。

短路特性是理解 Java 逻辑运算符行为的关键——它不是“省事小技巧”,而是影响程序是否崩溃、结果是否正确的核心机制。
什么叫短路?
短路,指在确定整个布尔表达式结果后,**跳过后续子表达式的计算**。Java 只对 && 和 || 做短路处理;而 & 和 | 总是两边都算,不短路。
-
&&:左边为
false→ 整个结果必为false→ 右边不执行 -
||:左边为
true→ 整个结果必为true→ 右边不执行 - ! 是单目运算符,不涉及“左右”,所以不存在短路问题
为什么短路很重要?
它直接关系到代码的安全性和可预期性,尤其在涉及对象访问、方法调用或副作用操作时:
- 防空指针:
if (obj != null && obj.isValid())—— 若obj为null,obj.isValid()根本不会被调用 - 避免无效计算:
if (user.isPremium() && loadExpensiveReport())—— 普通用户不触发耗时报告加载 - 控制副作用:
boolean b = false && (i++ > 0)→i不变;换成&就会自增
短路和非短路的对比示例
看这段代码的输出差异:
立即学习“Java免费学习笔记(深入)”;
int i = 10;boolean a = false && (i++ == 10); // i 仍是 10
boolean b = false & (i++ == 10); // i 变成 11
关键区别就在这里:短路让右边“没机会运行”,而非短路不管左边是什么,右边一定执行。
怎么用才稳妥?
- 日常条件判断一律用 && 和 ||,这是语义正确的选择
- 只有当你明确需要“两边都执行”(比如同时触发两个日志、必须调用两个初始化方法),才考虑 & 或 |,但要加注释说明意图
- 复杂条件建议拆解+命名,比如:
boolean hasValidId = id != null && !id.trim().isEmpty();
if (hasValidId && isUserActive()) { ... }


















