動作の理解を容易にするためにここにあるので、状態を見ないでください
結果が真に等しいのはなぜですか?
boolean result = false && (false)?false:true;
私たちは次のことで問題を解決できることを知っています:
boolean result = false && (false?false:true);
しかし、なぜ最初の構文が正しくないのか疑問に思っています。「?」のように見えます。演算子は「&&」よりも優先されます
ternary condition(?:
)は&&
よりも precedence が低くなっています。そう
boolean result = false && (false)?false:true;
(不要な括弧がある);と同等です
boolean result = (false && false) ? false : true;
(false && false
はfalse
であるため)、これは次のようになります。
boolean result = false ? false : true;
もちろん、これはtrue
です。
false && (false)
はfalse
と評価されるため、三項演算子の最後の値であるtrue
が返されます。
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
なぜなら
boolean result = false && (false)?false:true;
として解釈されます
boolean result = (false && (false))?false:true;
参照: Java演算子の優先順位 。この表では、&&
の優先順位が? :
よりも高いことがわかります。
それはほんの一部です ブール代数 。
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を返します