请不要查看条件,因为它们在这里以简化对行为的理解
为什么结果等于 true ?
boolean result = false && (false)?false:true;
我知道我们可以解决这个问题:
boolean result = false && (false?false:true);
但我只是想知道为什么第一个语法不正确,看起来像'?运算符优先于 '&&'
请不要查看条件,因为它们在这里以简化对行为的理解
为什么结果等于 true ?
boolean result = false && (false)?false:true;
我知道我们可以解决这个问题:
boolean result = false && (false?false:true);
但我只是想知道为什么第一个语法不正确,看起来像'?运算符优先于 '&&'
三元条件( ?:
) 的优先级低于&&
。所以
boolean result = false && (false)?false:true;
(有不必要的括号);相当于
boolean result = (false && false) ? false : true;
由于 (since false && false
is false
),这简化为
boolean result = false ? false : true;
这当然是true
。
描述:- 比较两个表达式,只有当两者都为真时才返回真。如果一个或两个评估为 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
描述:- 比较两个表达式,如果一个或两个都为真,则返回真。仅当两个表达式都为假时才返回假。
以下列表显示了所有可能的组合:
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
false && (false)
计算结果为false
,因此返回三元运算符的最后一个值,即true
.
因为
boolean result = false && (false)?false:true;
被解释为
boolean result = (false && (false))?false:true;
请参阅:Java 运算符优先级。在表中,您可以看到&&
优先级高于? :
。
它只是一些布尔代数。
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