7

请不要查看条件,因为它们在这里以简化对行为的理解

为什么结果等于 true ?

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

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

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

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

4

5 回答 5

15

三元条件( ?:) 的优先低于&&。所以

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

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

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

由于 (since false && falseis false),这简化为

boolean result = false ? false : true;

这当然是true

于 2013-09-13T13:55:56.490 回答
11
  1. &&(逻辑与)

描述:- 比较两个表达式,只有当两者都为真时才返回真。如果一个或两个评估为 false,则返回 false。

以下列表显示了所有可能的组合:

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

句法

表达式1 && 表达式2

单击此处了解有关逻辑与的更多信息

  1. || (逻辑或)

描述:- 比较两个表达式,如果一个或两个都为真,则返回真。仅当两个表达式都为假时才返回假。

以下列表显示了所有可能的组合:

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

句法

表达式1 || 表达式2

单击此处了解逻辑或

于 2014-07-28T05:38:30.793 回答
6

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

于 2013-09-13T13:52:36.450 回答
2

因为

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

被解释为

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

请参阅:Java 运算符优先级。在表中,您可以看到&&优先级高于? :

于 2013-09-13T13:57:36.473 回答
1

它只是一些布尔代数

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。所以 false && true 返回 false

于 2013-09-13T13:55:23.567 回答