答案 0 :(得分:7)
不,||
使用所谓的short-circuit evaluation,也称为最小评估,并在找到一个计算结果为{{的{{em>}时停止评估条件1}}(从左到右)。
来自JLS:
15.24。条件或算子||
条件或运算符||运算符就像| (§15.22.2),但是 仅当左手操作数的值为左手时,才评估其右手操作数 操作数是假的。
true
以类似的方式运作:
15.23。条件和操作员&&
条件和操作员&&就像& (§15.22.2),但评估 只有当左侧操作数的值为时,它的右侧操作数 真。
答案 1 :(得分:1)
||
和&&
都是短路逻辑运算符。
当两个表达式由OR(||
)连接时,如果第一个表达式为真,则答案将始终为真。
|| true false
true true true
false true false
答案 2 :(得分:1)
&&
和||
会在结果公布后立即停止评估。例如:
if (a == null || a.get() == null)
效果很好,因为如果a为null,则不评估第二部分,并且不会冒NullPointerException风险。
如果您想要评估两个表达式,可以使用无条件&
或|
:
if (a == null | a.get() == null)
将评估这两个条件,无论第一个条件是否为真。
This thread给出了您可能希望这种情况发生的案例。