web-dev-qa-db-ja.com

false &&(false)?false:trueがtrueを返すのはなぜですか?

動作の理解を容易にするためにここにあるので、状態を見ないでください

結果が真に等しいのはなぜですか?

boolean result = false && (false)?false:true;

私たちは次のことで問題を解決できることを知っています:

boolean result = false && (false?false:true);

しかし、なぜ最初の構文が正しくないのか疑問に思っています。「?」のように見えます。演算子は「&&」よりも優先されます

7
Gomino

ternary condition?:)は&&よりも precedence が低くなっています。そう

boolean result = false && (false)?false:true;

(不要な括弧がある);と同等です

boolean result = (false && false) ? false : true;

false && falsefalseであるため)、これは次のようになります。

boolean result = false ? false : true;

もちろん、これはtrueです。

14
Bathsheba

false && (false)falseと評価されるため、三項演算子の最後の値であるtrueが返されます。

6
GriffeyDog

1)&&(論理積)

説明:-2つの式を比較し、両方がtrueと評価された場合にのみtrueを返します。一方または両方がfalseと評価された場合、falseを返します。

次のリストは、考えられるすべての組み合わせを示しています。

true && false // Evaluates false because the second is false
false && true // Evaluates false because the first is false
true && true // Evaluates true because both are true
false && false // Evaluates false because both are false

構文

式1 &&式2

論理積の詳細については、ここをクリックしてください

2)|| (論理OR)

説明:-2つの式を比較し、一方または両方がtrueと評価された場合にtrueを返します。両方の式がfalseの場合にのみfalseを返します。

次のリストは、考えられるすべての組み合わせを示しています。

true || false // Evaluates true because the first is true
false || true // Evaluates true because the second is true
true || true // Evaluates true because both are true
false || false // Evaluates false because both are false

構文

式1 ||式2

論理ORについてはここをクリックしてください

6
Rohan Pawar

なぜなら

boolean result = false && (false)?false:true;

として解釈されます

boolean result = (false && (false))?false:true;

参照: Java演算子の優先順位 。この表では、&&の優先順位が? :よりも高いことがわかります。

2
Jesper

それはほんの一部です ブール代数

False && false = true
false && true = false
true && true = true
true && false = false

したがって、最初のケースでは、それは書くようなものです:

if (false && false){
result = false
} else {
result = true
}

あなたの2番目のケースでは、それは書くようなものです:

result = false && (false == false);

false == falseはtrueを返します。したがって、false && trueはfalseを返します

1
Leviathan56