[Java] Difference between Logical Operators &, &&, |, ||

·

0 min read

Logical operators include

  • Logical OR |, ||
  • Logical AND &, &&
  • Logical eXclusive OR ^

But why Logical OR and Logical AND has two different operators? What difference between | and ||? What difference between & and &&?

如果你想閱讀中文版本,請點 這裡

| and || both are Logical OR, but the difference between these two is once the left side operation of || could decide the result, it would not operate the left side operation of ||, but | will compare expressions after the expression executed.

For example,

class LogicalOperatorOR {
    public static void main (String[] args) throws java.lang.Exception {
        int i = 3, j = 4, k = 5;
    System.out.println("Result with |:" + ((j < k++) | (i++ == j))); // i++ would operate
    System.out.println("i after operation:" + i);
    System.out.println(" k after operation:" + k);

    i = 3;
    j = 4;
    k = 5;
    System.out.println("Result with ||:" + ((j < k++) || (i++ == j))); // i++ would not operate
    System.out.println("i after operation:" + i);
    System.out.println(" k after operation:" + k);
    }
}

Output

Result with |:true
i after operation:4
j after operation:6
Result with ||:true
i after operation:3
j after operation:6

In the 11th line, because the expression on the left of the || operator is true, it needn't look at the expression on the right to know that the result is true, so i++ == j will not be executed, i will not increase.

It's the same in "Logical AND". When the expression on the left of && can determine the result of the operation, the expression on the right will not be executed.

For example,

class LogicalOperatorAND {
    public static void main (String[] args) throws java.lang.Exception {
        int i = 3, j = 4, k = 5, l = 6;
    System.out.println("Result with &:" + ((i++ == j++) & (k++ == l))); // k++ would operate
    System.out.println("i after operation:" + i);
    System.out.println("j after operation:" + j);
    System.out.println("k after operation:" + k);

    i = 3;
    j = 4;
    k = 5;
    l = 6;
    System.out.println("Result with &&:" + ((i++ == j++) && (k++ == l))); // k++ would not operate
    System.out.println("i after operation:" + i);
    System.out.println("j after operation:" + j);
    System.out.println("k after operation:" + k);
    }
}

Output

Result with &:false
i after operation:4
j after operation:5
k after operation:6
Result with &&:false
i after operation:4
j after operation:5
k after operation:5

In the 13th line, the expression on the left of the && operator is false, so you needn't look at the expression on the right to know that the result is false, so k++ == l will not be executed and k will not increase.

|| and && are also called conditional operators, since their short-circuit behaviors, they are also called short-circuit OR and short-circuit AND.

The above are some exercises on AND and OR. If you have any suggestions, please leave a message below. Thank you.