重複の可能性:
&&(AND)および|| (または)JavaIFステートメント
if(foo || bar) {
}
fooがtrueの場合、それはbarに入りますか?
いいえ、短絡評価||
と呼ばれるものを使用します。これは最小評価とも呼ばれ、 (左から右に)評価する式が見つかるとすぐに条件の評価を停止します。true
JLSから:
15.24。条件付き-または演算子||
条件付き演算子|| 演算子は|のようなものです (§15.22.2)ただし、左側のオペランドの値がfalseの場合にのみ、右側のオペランドを評価します。
&&
同様の方法で動作します:
15.23。条件付き-そして演算子&&
条件付き演算子&&は&(§15.22.2)に似ていますが、左側のオペランドの値がtrueの場合にのみ右側のオペランドを評価します。
||
と&&
は両方とも短絡論理演算子です。
2つの式がOR(||
)で結合されている場合、最初の式が真であれば、答えは常に真になります。
|| true false
true true true
false true false
&&
||
結果がわかったらすぐに評価を停止します。したがって、たとえば:
if (a == null || a.get() == null)
aがnullの場合、2番目の部分は評価されず、NullPointerExceptionのリスクがないため、うまく機能します。
&
両方の式を評価する場合は、無条件または|
:を使用できます。
if (a == null | a.get() == null)
最初の条件が真であるかどうかにかかわらず、両方の条件を評価します。
このスレッドは、それを実現したい場合の例を示しています。