2017-05-15 7 views
1

なぜこのブールステートメントが本当ですか?SOS for Java booleanステートメント

a= 10; 
b = 0; 
7 < a || a == b && b > 9 - a/b 

OR(||)演算子(A> 7)の最初のオペランドがtrueに評価されているので0で割ったものが、エラー

+4

最初の条件が真であるため、 '7

+1

ヒント:その式がどのように評価されると思いますか? –

+0

良い質問です。 [Operators](https://docs.oracle.com/javase/tutorial/java/nutsandbolts/operators.html)によると&&が||より優先されます。だからなぜ? &&の前に短絡しますか? –

答えて

7

あるので、短絡および他には何が評価されます。したがって、式全体はtrueと評価されます。

+0

私は時計にビートしてください:( – Nathan

+5

IDKなぜこのような非常に簡単な質問のために直ちに6つのアップフォートがあるのですか?忘れました、あなたは司会者かもしれません:D – Yahya

+0

@Yahyaほとんど1つの行で説明されています。 – AxelH

1

7 < aがtrueを返します。後は||なので、残りは実行されません。

true || falseが真であり、true || trueも真であるため、2番目のメンバーを評価するのは時間の無駄です。

1

OR演算子||は遅延評価またはshort-circuit evaluationを使用します。これは、最初の式7 < aが真であるため、javaがすでに何かを見つけたので、ゼロ除算を含む他のステートメントを評価しません。

実際にエラーが発生した場合は、このOR演算子|を使用して、すべてのステートメントの評価を強制する必要があります。たいていビット単位の演算子としてしか使用されませんが、非短絡バージョンの||も使用します。 |||の詳細については、hereをご覧ください。例えば

予想通り、

boolean c = (7 < a | a == b && b > 9 - a/b); 

は、ArithmeticExcptionの原因となります。

+0

ああ、私は早く、多くの答えを入力する必要があります... – ptstone

関連する問題