我对 Java 中的IF
子句有疑问。
我有和表达:
if ((someObject != null & connectedToTheInternet) || operate) {
// some action
}
我的逻辑是正确的:如果someObject != null
等于 true 而connectedToTheInternet
等于 false ,那么我们(someObject != null & connectedToTheInternet)
等于 false 然后我们有以下块:
if (false || operate) {
// some action
}
如果operate
等于 true ,那么// some action
会被触发吗?
答案 0 :(得分:2)
只是第一个注意事项:逻辑AND运算符是"&&"而不只是"&" (按位AND)。
以下,你的答案是肯定的...... JVM会根据你的想法运行条件。
顺便说一句,我建议你阅读这些操作符短路的内容:如果你正在学习它会很有趣。
例如,如果您有if (a && (b || c)
和a==false
,则JVM不会评估b
或c
条件,因为false && ...
将始终为false
在if (a || b || c && d)
的情况下也是如此:如果a==true
,则JVM将忽略其他部分并将其视为真,因为true || ....
将始终为真。
答案 1 :(得分:2)
是。 if-clauses从左到右进行评估。如果没有使用括号,&&
优先,更高的优先级有!
(不) - 类似于数学中的乘法(AND),加法(OR)和负数( - )(例如&# 34; A&&(B || C)!= A&& B || C ==(A&& B)|| C") - 如果你是的话,我建议使用括号不确定。这样就可以将!= null
检查和调用组合到同一if语句中(例如if (object!=null && object.dosomething())
)。
顺便说一下。 &
和&&
(short-circuit)之间存在差异,当使用&
时,即使第一个条件已经false
,第二个条件也会得到评估。当使用&&
时,如果第一个条件为false
,则Java不会检查第二个条件,因为整个项不再为真 - 这仅在第二个条件不是布尔值时才重要变量但是一个方法(被调用与否 - > side effects;这个"跳过"被称为短路。 ||
和|
的情况相同,如果第一个运算符已经true
,则可能无法评估第二个运算符(如果是||
)。
通常只使用||
和&&
。
为了完整性:&
也是Java中的按位AND运算符。
答案 2 :(得分:0)
if (false || operate) {
// some action
}
如果操作为true,则阻止执行。