Please don't look at the condition as they are here to ease the understanding of the behavior
Why does result equals true ?
boolean result = false && (false)?false:true;
I know we can solve the issue doing:
boolean result = false && (false?false:true);
But I am just wondering why the first syntax is incorrect, looks like the '?' operator has more priority over '&&'
The ternary conditional ( ?:
) has lower precedence than &&
. So
boolean result = false && (false)?false:true;
(having unnecessary parentheses); is equivalent to
boolean result = (false && false) ? false : true;
Since (since false && false
is false
), this reduces to
boolean result = false ? false : true;
which, of course, is true
.
false && (false)
计算结果为false
,因此返回三元运算符的最后一个值,这是true
。
1) && (logical AND)
Description :- Compares two expressions and returns true only if both evaluate to true. Returns false if one or both evaluate to false.
The following list shows all possible combinations:
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
Syntax
expression1 && expression2
Cllick here to know more About Logical AND
2) || (logical OR)
Description :- Compares two expressions and returns true if one or both evaluate to true. Returns false only if both expressions are false.
The following list shows all possible combinations:
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
Syntax
expression1 || expression2
Because
boolean result = false && (false)?false:true;
is interpreted as
boolean result = (false && (false))?false:true;
See: Java operator precedence . In the table you can see &&
has higher precedence than ? :
? :
.
it is just some boolean algegra .
False && false = true
false && true = false
true && true = true
true && false = false
So in the first case, it is like writting :
if (false && false){
result = false
} else {
result = true
}
In your second case, it is like writting :
result = false && (false == false);
and false == false returns true. So false && true returns false
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.