次の条件があるとしましょう。
if ( myList == null || myList.isEmpty() || xomeX == someY )
これらの条件の評価の順序は? 左か右か、右から左か、毎回ランダムか?
最初の 1 つが合格した場合、他のものは無視されますか?
次の条件があるとしましょう。
if ( myList == null || myList.isEmpty() || xomeX == someY )
これらの条件の評価の順序は? 左か右か、右から左か、毎回ランダムか?
最初の 1 つが合格した場合、他のものは無視されますか?
代入演算子を除いて、常に左から右=
にする必要があります。短絡OR
演算子 を使用しているため、最初の条件が の場合true
、残りは評価されません。
条件付き or 演算子は、構文的に左結合です (左から右にグループ化されます)。
実行時には、左側のオペランド式が最初に評価されます。結果がブール型の場合、ボックス化解除変換 (§5.1.8) の対象となります。
結果の値が真の場合、条件付き OR 式の値は真であり、右側のオペランド式は評価されません。
if ( myList == null || myList.isEmpty() || xomeX == someY )
はい、評価は左から右へ!
と
最初の条件が真の場合、次の条件は評価されません。この概念は短絡評価と呼ばれます。詳細については、こちらをご覧ください。以前に投稿された同様の SO の質問は、Java 論理演算子の短絡です。
JLSから
実行時に、左側のオペランド式が最初に評価されます [...] 結果の値が true の場合、条件付き OR 式の値は true であり、右側のオペランド式は評価されません。
1) 左から右
2) この場合、1 つの条件が true の場合、残りは評価されません。したがって、が null の場合、評価myList
はスローされません (評価されないため)。NullPointerException
myList.isEmpty()
|| は短絡 OR 演算子です。つまり、条件は厳密に左から右に評価され、このチェック プロセスは最初の真の結果で停止します。