为啥 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 && false
是false
),这简化为
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
【讨论】:
我的问题更多是关于语法而不是布尔代数 @Leviathan56False && false != true
以上是关于为啥 false && (false)?false:true 返回 true的主要内容,如果未能解决你的问题,请参考以下文章