短路或 || 在左侧为 true 时跳过右侧表达式,避免冗余计算、异常和副作用;逻辑或 | 总是执行两侧,可能引发空指针、I/O 开销及意外状态变更。

Java 中逻辑或 | 和短路或 || 对程序性能的影响,核心在于“是否执行右侧表达式”。这不仅关系到运算速度,更直接影响副作用、异常风险和资源开销。
右侧表达式是否被计算
短路或 || 在左侧为 true 时,直接跳过右侧表达式,不触发任何计算;而逻辑或 | 总是计算两侧,无论左侧结果如何。
-
|| 示例:
isValid() || loadConfig()—— 若isValid()返回true,loadConfig()完全不调用,省去 I/O、对象创建等开销 -
| 示例:
isValid() | loadConfig()—— 即使isValid()已为true,loadConfig()仍会执行,可能引发不必要的文件读取或空指针异常
避免运行时异常
短路特性可天然规避因右侧表达式引发的异常,从而减少 try-catch 或防御性检查,间接提升性能与代码简洁性。
- 比如:
obj != null && obj.getValue() > 0—— 若obj为null,obj.getValue()不会被调用,不会抛NullPointerException - 换成
&或|就会强制执行右侧,必须额外加判空,否则崩溃
副作用与变量状态变化
当右侧表达式含自增、方法调用、日志打印等副作用时,| 会导致多余执行,影响逻辑正确性和可观测性。
立即学习“Java免费学习笔记(深入)”;
-
flag = (x > 0) | (y++ > 5):无论x > 0是否成立,y都会自增 -
flag = (x > 0) || (y++ > 5):仅当x 时,<code>y才自增,行为可控且高效
实际性能差异有多大
单次运算的耗时差异微乎其微(纳秒级),但高频场景下累积效应明显:
- 循环内条件判断(如每帧游戏逻辑、实时数据过滤)—— 省掉一次方法调用,可能节省数百纳秒
- Web 请求处理中链式校验(权限 → 参数 → 限流)—— 短路能提前终止,降低平均响应延迟
- 高并发服务中,避免无谓的对象分配和 GC 压力,对吞吐量有可测量提升



















