【发布时间】:2019-02-10 20:41:57
【问题描述】:
基于this 和this 答案Java 对&& 和|| 运算符采用短路。它还赋予&& 高于|| 的优先级。然而,以下代码的计算结果为 true:
boolean condition1 = true;
boolean condition2 = true;
boolean condition3 = true;
if ( !condition3 && condition1 || condition2 ) {
System.out.println("Condition is true"); // prints Condition is true
}
由于condition3 设置为true,这应该会导致!condition3 为假,那么为什么Java 还要检查condition1?
如果我在第一个条件周围添加括号,它仍然评估为真:
if ( (!condition3) && condition1 || condition2 ) {
System.out.println("Condition is true");
}
我理解为什么这段代码的计算结果为 true:
if ( condition1 || condition2 && !condition3) {
System.out.println("Condition is true");
}
因为一旦Java 在condition1 之后遇到||,它甚至不会检查以下条件。但我不明白为什么前两个示例的计算结果为 true。
我的目标是要求condition3 为假,然后任一 conditon1 或condition2(或两者)为真(但如果condition3 为true 那么无论condition1 和condition2 如何评估,我都不想执行打印语句)
谢谢
【问题讨论】:
-
“我的目标是要求条件 3 为假,然后让条件 1 或条件 2(或两者)为真”
if ((!condition3)&&(condition1||condition2)) -
好的,所以我错过了
condition1 || condition2周围的括号。但是为什么仅在!condition3周围添加括号是不够的(给予!condition3更高的优先级)? -
“更高的优先级”意味着这部分“更接近”然后其他部分。
&&的 结果 成为||的一侧
标签: java if-statement operators