为什么假和&& (假)?false:true返回true

时间:2013-09-13 13:50:34

标签: java syntax ternary-operator

请不要看这些情况,因为他们在这里是为了减轻对行为的理解

为什么结果等于真?

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

我知道我们可以解决这个问题:

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

但我只是想知道为什么第一种语法不正确,看起来像'?'运营商优先于'&&'

5 个答案:

答案 0 :(得分:13)

三元条件?:)的precedence低于&& 。所以

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

(有不必要的括号);相当于

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

由于(因为false && falsefalse),因此会降低为

boolean result = false ? false : true;

当然是true

答案 1 :(得分:6)

false && (false)计算结果为false,因此返回三元运算符的最后一个值,即true

答案 2 :(得分:4)

1)&& (逻辑AND)

描述: - 比较两个表达式,只有当两个表达式都为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

Cllick here to know more About Logical AND

2)|| (逻辑或)

描述: - 比较两个表达式,如果其中一个或两个表达式为true,则返回true。仅当两个表达式都为假时才返回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

Click here to know about Logical OR

答案 3 :(得分:2)

由于

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

被解释为

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

请参阅:Java operator precedence。在表格中,您可以看到&&的优先级高于? :

答案 4 :(得分:1)

只是一些boolean algegra

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

所以在第一种情况下,它就像写作:

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

在你的第二个案例中,它就像写作:

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

和false == false返回true。所以虚假&& true返回false