短路或(||)能避免空指针、副作用失控及逻辑错误,提升代码正确性与可预测性;普通按位或(|)强制执行两侧,易引发异常、重复操作和语义违背。

因为短路或(||)能避免不必要的计算和潜在错误,而普通单竖线(|)强制执行两边,容易引发空指针、重复调用、状态错乱等问题。
避免空指针异常
当左侧表达式已能确定结果时,短路或直接跳过右侧——比如判断对象是否为空再调用方法:
-
安全写法(推荐):
null == obj || obj.toString().length > 0,obj为null时,obj.toString()根本不会执行; -
危险写法:
null == obj | obj.toString().length > 0,即使左边为true,右边仍会触发toString(),导致NullPointerException。
防止副作用失控
副作用指表达式执行带来的额外影响,如变量自增、数据库写入、日志打印等。短路或只在必要时才触发右侧副作用:
-
isValid() || saveToDB():校验失败才保存,逻辑清晰; -
isValid() | saveToDB():无论校验是否通过,saveToDB()总会执行,可能造成重复写库或资源浪费。
符合人类直觉与业务逻辑
多数条件判断本意就是“满足任一即可停止”——比如权限检查:isAdmin() || hasPermission("edit")。用||自然体现“只要有一个成立就放行”的语义;而|强行算完两个,既违背意图,又丧失控制权。
性能只是附带好处,正确性才是关键
虽然跳过右侧能省点CPU时间,但这不是主因。真正不可替代的价值在于:它让代码行为可预测、可推理。在空检查、链式调用、状态依赖等场景中,用错|不是慢一点,而是直接崩溃或逻辑错乱。

















