私が次の条件を持っているとしましょう:
if ( myList == null || myList.isEmpty() || xomeX == someY )
これらの条件の評価の順序は何ですか?左または右、右から左またはランダムeach時間?
最初のものが合格した場合、他のものは無視されますか?
代入演算子=
を除いて、常に左から右である必要があります。短絡OR
演算子を使用しているため、最初の条件がtrue
の場合、残りの条件は評価されません。
条件演算子または演算子は構文的に左結合です(左から右にグループ化されます)。
実行時に、左側のオペランド式が最初に評価されます。結果の型がブール値の場合、ボックス化解除変換が行われます(§5.1.8)。
結果の値がtrueの場合、条件式または式の値はtrueであり、右側のオペランド式は評価されません。
実行時に、左側のオペランド式が最初に評価されます[...]結果の値が真の場合、条件式または式の値は真であり、右側のオペランド式は評価されません。
if ( myList == null || myList.isEmpty() || xomeX == someY )
はい、評価は左から右です!
そして
最初の条件が真の場合、次の条件は評価されません。この概念は、短絡評価と呼ばれます。あなたはこれについてもっと読むことができます ここ 。同様のSO以前に投稿された質問は Java論理演算子の短絡
1)左から右
2)この場合、1つの条件が真の場合、残りの条件は評価されません。したがって、myList
がnullの場合、myList.isEmpty()
を評価するNullPointerException
はスローされません(評価されないため)
すべての演算子には、独自の precedence および associativity があります。
これらのリンクはあなたの質問に答えるのに十分です。
||は短絡OR演算子です。つまり、条件は左から右に厳密に評価され、このチェックプロセスは最初の真の結果で停止します。