なぜこのブールステートメントが本当ですか?SOS for Java booleanステートメント
a= 10;
b = 0;
7 < a || a == b && b > 9 - a/b
OR(||
)演算子(A> 7)の最初のオペランドがtrue
に評価されているので0で割ったものが、エラー
なぜこのブールステートメントが本当ですか?SOS for Java booleanステートメント
a= 10;
b = 0;
7 < a || a == b && b > 9 - a/b
OR(||
)演算子(A> 7)の最初のオペランドがtrue
に評価されているので0で割ったものが、エラー
7 < a
がtrueを返します。後は||
なので、残りは実行されません。
true || false
が真であり、true || true
も真であるため、2番目のメンバーを評価するのは時間の無駄です。
OR演算子||
は遅延評価またはshort-circuit evaluationを使用します。これは、最初の式7 < a
が真であるため、javaがすでに何かを見つけたので、ゼロ除算を含む他のステートメントを評価しません。
実際にエラーが発生した場合は、このOR演算子|
を使用して、すべてのステートメントの評価を強制する必要があります。たいていビット単位の演算子としてしか使用されませんが、非短絡バージョンの||
も使用します。 ||
対|
の詳細については、hereをご覧ください。例えば
予想通り、
boolean c = (7 < a | a == b && b > 9 - a/b);
は、ArithmeticExcptionの原因となります。
ああ、私は早く、多くの答えを入力する必要があります... – ptstone
最初の条件が真であるため、 '7
ヒント:その式がどのように評価されると思いますか? –
良い質問です。 [Operators](https://docs.oracle.com/javase/tutorial/java/nutsandbolts/operators.html)によると&&が||より優先されます。だからなぜ? &&の前に短絡しますか? –