简体   繁体   中英

Why does false && (false)?false:true return true

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

Click here to know about Logical OR

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM