Java:在"If"语句中AND后的OR运算符

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是假的,然后有两种 conditon1condition2(或两者)是真实的(但如果condition3true那么我不希望打印语句,无论执行的如何condition1condition2评估)

谢谢

孙兴斌*_*孙兴斌 8

你说:

它还提供&&比||更高的优先级.

这意味着!condition3 && condition1将首先进行评估.

所以这

!condition3 && condition1 || condition2
Run Code Online (Sandbox Code Playgroud)

等于:

(!condition3 && condition1) || condition2
Run Code Online (Sandbox Code Playgroud)

因为condition2IS true,所述表达是true.