作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
基于 this和 this answer 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
为 false 那么为什么 Java 还要检查 condition1
?
如果我在第一个条件周围添加括号,它仍然计算为真:
if ( (!condition3) && condition1 || condition2 ) {
System.out.println("Condition is true");
}
我明白为什么这段代码的计算结果为真:
if ( condition1 || condition2 && !condition3) {
System.out.println("Condition is true");
}
因为一旦 Java 在 condition1
之后遇到 ||
,它甚至不会检查以下条件。但我不明白为什么前两个示例的计算结果为真。
我的目标是要求 condition3
为假,然后 要么 conditon1
或 condition2
(或两者都有) 为真(但如果 condition3
为 true
那么无论 condition1
和 condition2 如何执行,我都不希望执行打印语句
评估)
谢谢
最佳答案
你说:
It also gives && higher precedence over ||.
这意味着 !condition3 && condition1
将首先被评估。
所以这个
!condition3 && condition1 || condition2
等于:
(!condition3 && condition1) || condition2
因为 condition2
为 true
,所以表达式为 true
。
关于Java: "If"语句中 AND 之后的 OR 运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52189590/
我是一名优秀的程序员,十分优秀!