web-dev-qa-db-ja.com

Java

私が次の条件を持っているとしましょう:

if ( myList == null || myList.isEmpty() || xomeX == someY )

これらの条件の評価の順序は何ですか?左または右、右から左またはランダムeach時間?

最初のものが合格した場合、他のものは無視されますか?

14
Kevin Rave

代入演算子=を除いて、常に左から右である必要があります。短絡OR演算子を使用しているため、最初の条件がtrueの場合、残りの条件は評価されません。

JLS 15.24

条件演算子または演算子は構文的に左結合です(左から右にグループ化されます)。

実行時に、左側のオペランド式が最初に評価されます。結果の型がブール値の場合、ボックス化解除変換が行われます(§5.1.8)。

結果の値がtrueの場合、条件式または式の値はtrueであり、右側のオペランド式は評価されません。

20
NINCOMPOOP

[〜#〜] jls [〜#〜] から

実行時に、左側のオペランド式が最初に評価されます[...]結果の値が真の場合、条件式または式の値は真であり、右側のオペランド式は評価されません。

if ( myList == null || myList.isEmpty() || xomeX == someY )

はい、評価は左から右です!

そして

最初の条件が真の場合、次の条件は評価されません。この概念は、短絡評価と呼ばれます。あなたはこれについてもっと読むことができます ここ 。同様のSO以前に投稿された質問は Java論理演算子の短絡

5
Aniket Thakur

1)左から右

2)この場合、1つの条件が真の場合、残りの条件は評価されません。したがって、myListがnullの場合、myList.isEmpty()を評価するNullPointerExceptionはスローされません(評価されないため)

2
morgano

すべての演算子には、独自の precedence および associativity があります。

これらのリンクはあなたの質問に答えるのに十分です。

1
Learn More

||は短絡OR演算子です。つまり、条件は左から右に厳密に評価され、このチェックプロセスは最初の真の結果で停止します。

0
AlexeyGorovoy