短路或(||)左侧为true时跳过右侧执行,逻辑或(|)始终执行两侧;日常条件判断优先用||以保障安全高效,仅当必须确保右侧副作用执行时才用|。

Java 中的逻辑或(|)和短路或(||)都用于判断两个布尔表达式是否至少有一个为 true,但关键区别在于:是否**一定执行右侧表达式**。
短路或(||):左侧为 true 就跳过右侧
当左侧表达式结果为 true 时,整个表达式结果已确定为 true,右侧表达式**不会执行**——这就是“短路”行为。
- 避免无谓计算,提升效率
- 防止右侧可能引发的异常或副作用(比如空指针、自增、方法调用等)
- 示例:
str != null || str.length() > 0—— 若str为null,str.length()不会执行,不会抛出NullPointerException
逻辑或(|):左右两边都会执行
无论左侧结果如何,右侧表达式**总会求值**。它本质是按位或运算符,在布尔上下文中也强制执行两边。
- 适合需要确保右侧代码一定运行的场景(如必须触发日志、计数器、状态更新)
- 若右侧有副作用(如
i++、方法调用),它一定会发生 - 示例:
flag = false | (i++ > 5)—— 即使flag左侧是false,i仍会自增
怎么选?看是否依赖右侧的执行
日常条件判断中,绝大多数情况该用 ||:
立即学习“Java免费学习笔记(深入)”;
- 安全(防 NPE、越界等)
- 高效(跳过冗余逻辑)
- 符合直觉(“只要一个成立就通过”)
只有明确需要右侧表达式**无论何时都执行**(比如调试埋点、多条件副作用联动),才考虑用 |,但这类需求极少,且容易引发不易察觉的 bug。


















