17

次の条件があるとしましょう。

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

これらの条件の評価の順序は? 左か右か、右から左か、毎回ランダムか?

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

4

6 に答える 6

27

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

JLS 15.24 :

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

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

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

于 2013-07-29T12:21:56.020 に答える
7
if ( myList == null || myList.isEmpty() || xomeX == someY )

はい、評価は左から右へ!

最初の条件が真の場合、次の条件は評価されません。この概念は短絡評価と呼ばれます。詳細については、こちらをご覧ください。以前に投稿された同様の SO の質問は、Java 論理演算子の短絡です。

于 2013-07-29T12:34:27.460 に答える
7

JLSから

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

于 2013-07-29T12:23:19.390 に答える
3

1) 左から右

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

于 2013-07-29T12:21:51.610 に答える
1

すべての演算子には独自の優先順位結合性があります。

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

于 2013-07-29T12:44:54.670 に答える
0

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

于 2013-07-29T12:28:29.837 に答える