为啥 false && (false)?false:true 返回 true

Posted

技术标签:

【中文标题】为啥 false && (false)?false:true 返回 true【英文标题】:Why does false && (false)?false:true return true为什么 false && (false)?false:true 返回 true 【发布时间】:2013-09-18 05:52:09 【问题描述】:

请不要看情况,因为他们在这里是为了便于理解行为

为什么结果等于真?

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

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

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

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

【问题讨论】:

【参考方案1】:

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

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

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

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

因为(因为false && falsefalse),这简化为

boolean result = false ? false : true;

当然是true

【讨论】:

【参考方案2】:
    &&(逻辑与)

描述:- 比较两个表达式,只有当两者都为真时才返回真。如果一个或两个都为 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

Cllick here to know more About Logical AND

    || (逻辑或)

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

语法

表达式1 ||表达式2

Click here to know about Logical OR

【讨论】:

您的第一组示例中似乎出现了复制粘贴错误。我认为应该是:false && false // Evaluates false because neither are true 而不是您重复的第二行。【参考方案3】:

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

【讨论】:

【参考方案4】:

因为

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

被解释为

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

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

【讨论】:

【参考方案5】:

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

【讨论】:

我的问题更多是关于语法而不是布尔代数 @Leviathan56 False && false != true

以上是关于为啥 false && (false)?false:true 返回 true的主要内容,如果未能解决你的问题,请参考以下文章

为啥设置 -e; true && false && true 不退出?

2.4 逻辑运算符 &&(与)||(或)非(!)

逻辑运算符短路与,短路或

为啥下面的代码块应该返回 false?

js中的||和&&的用法

为啥这个不等式在 C 中是 False 的? [复制]