Ale*_*x K 1 java if-statement operators
基于此和这个答案,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
}
Run Code Online (Sandbox Code Playgroud)
既然condition3设置为true这应该!condition3是假的,为什么Java甚至检查condition1?
如果我在第一个条件周围添加括号,它仍然计算为true:
if ( (!condition3) && condition1 || condition2 ) {
System.out.println("Condition is true");
}
Run Code Online (Sandbox Code Playgroud)
我理解为什么这段代码评估为true:
if ( condition1 || condition2 && !condition3) {
System.out.println("Condition is true");
}
Run Code Online (Sandbox Code Playgroud)
因为一旦Java遇到它||之后condition1它甚至不会检查以下条件.但我不明白为什么前两个例子评估为真.
我的目标是要求condition3是假的,然后有两种 conditon1或condition2(或两者)是真实的(但如果condition3是true那么我不希望打印语句,无论执行的如何condition1和condition2评估)
谢谢
你说:
它还提供&&比||更高的优先级.
这意味着!condition3 && condition1将首先进行评估.
所以这
!condition3 && condition1 || condition2
Run Code Online (Sandbox Code Playgroud)
等于:
(!condition3 && condition1) || condition2
Run Code Online (Sandbox Code Playgroud)
因为condition2IS true,所述表达是true.
| 归档时间: |
|
| 查看次数: |
170 次 |
| 最近记录: |