请不要看这些情况,因为他们在这里是为了减轻对行为的理解
为什么结果等于真?
boolean result = false && (false)?false:true;
我知道我们可以解决这个问题:
boolean result = false && (false?false:true);
但我只是想知道为什么第一种语法不正确,看起来像'?'运营商优先于'&&'
答案 0 :(得分:13)
三元条件(?:
)的precedence低于&&
。所以
boolean result = false && (false)?false:true;
(有不必要的括号);相当于
boolean result = (false && false) ? false : true;
由于(因为false && false
为false
),因此会降低为
boolean result = false ? false : true;
当然是true
。
答案 1 :(得分:6)
false && (false)
计算结果为false
,因此返回三元运算符的最后一个值,即true
。
答案 2 :(得分:4)
1)&& (逻辑AND)
描述: - 比较两个表达式,只有当两个表达式都为true时才返回true。如果一个或两个评估为false,则返回false。
以下列表显示了所有可能的组合:
true && false // Evaluates false because the second is false
false && true // Evaluates false because the first is false
true && true // Evaluates true because both are true
false && false // Evaluates false because both are false
语法
表达1&&表达式2
Cllick here to know more About Logical AND
2)|| (逻辑或)
描述: - 比较两个表达式,如果其中一个或两个表达式为true,则返回true。仅当两个表达式都为假时才返回false。
以下列表显示了所有可能的组合:
true || false // Evaluates true because the first is true
false || true // Evaluates true because the second is true
true || true // Evaluates true because both are true
false || false // Evaluates false because both are false
语法
表达式1 ||表达式2
答案 3 :(得分:2)
由于
boolean result = false && (false)?false:true;
被解释为
boolean result = (false && (false))?false:true;
请参阅:Java operator precedence。在表格中,您可以看到&&
的优先级高于? :
。
答案 4 :(得分:1)
只是一些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。所以虚假&& true返回false