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

8
请不要关注这里的条件,因为它们是为了方便理解行为而存在的。
为什么结果等于 true?
boolean result = false && (false)?false:true;

我知道我们可以通过以下方式解决这个问题:
boolean result = false && (false?false:true);

但我只是好奇为什么第一种语法不正确,看起来问号运算符比“&&”具有更高的优先级。

5个回答

16

三元条件运算符?:)的优先级&&低。

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

在编程中,(有不必要的圆括号)等同于。
boolean result = (false && false) ? false : true;

由于(因为false && falsefalse),因此简化为

boolean result = false ? false : true;

当然是true


12
  1. && (逻辑与)

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

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

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

语法

expression1 && expression2

点击此处了解逻辑 AND 更多信息

  1. || (逻辑 OR)

描述:比较两个表达式,如果其中一个或两个表达式求值为 true,则返回 true。仅在两个表达式都为 false 时返回 false。

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

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

语法

expression1 || expression2

单击此处了解逻辑或


你的第一组示例中似乎存在复制粘贴错误。我认为应该是:false && false // 因为两者都不为真,所以结果为 false,而不是你重复的第二行。 - aradil

6
< p > false && (false) 会被计算为 false,所以三元运算符的最后一个值是 true


2
因为
boolean result = false && (false)?false:true;

被解释为
boolean result = (false && (false))?false:true;

参见: Java操作符优先级。在表格中,您可以看到&&的优先级高于? :


1

这只是一些boolean algebra

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。


我的问题更多关于语法而非布尔代数。 - Gomino
1
@Leviathan56 False && false != true@Leviathan56 False && false != true - Germann Arlington

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接