Java 中的邏輯運算子和短路

Dhruvdeep Singh Saini 2023年10月12日
  1. Java 中邏輯運算子的使用
  2. Java 中非運算子 (!) 的使用
  3. 在 Java 中使用短路
  4. 在 Java 中使用短路的優點
  5. 在 Java 中使用短路的缺點
Java 中的邏輯運算子和短路

這篇文章對 java 中的短路進行了深入的瞭解,但是在 java 中進行短路之前,你必須知道什麼是邏輯運算子以及如何將它們與各種表示式一起使用。

Java 中邏輯運算子的使用

邏輯運算子用於檢查 2 個或多個返回布林值的表示式的結果。

邏輯運算子也稱為布林運算子,它們計算的多個表示式稱為複合表示式。它們是邏輯 AND (&&)、邏輯 OR (||) 和邏輯 NOT (!)

Java 中非運算子 (!) 的使用

Not (!) 運算子是唯一的一元邏輯運算子。它檢查一個條件並返回相反的結果,這意味著如果條件為,運算子將返回

import java.io.*;
public class NotExample {
  public static void main(String args[]) {
    int big = 25, small = 10;

    System.out.println("!(big < small) = " + !(big < small));
  }
}

輸出:

!(big < small) = true

在這裡,(big < small) 返回 false。由於條件之前存在 Not (!) 運算子,所以答案變為 true

在 Java 中使用短路

Java 中的短路是在評估邏輯表示式之後執行的跳過操作,因為最終結果是在評估整個表示式之前獲得的。

Java 中的短路可能發生在:

  1. 邏輯 AND (&&) 運算子 - 有兩種情況。如果第一個表示式返回 true,我們將檢查第二個表示式是否也給出 true,返回 true 作為最終答案。

    但是,如果第一個表示式在計算後返回 false,並且第二個表示式由於條件已經失敗而未計算,則會發生短路。

import java.io.*;
public class ANDExample {
  public static void main(String arg[]) {
    if (false && true && true) {
      //
    } else {
      System.out.println("First false, condition failed, Short Circuiting!");
    }

    if (true && true && true) {
      System.out.println("All true, no short circuiting!");
    }
  }
}

輸出:

First false, condition failed, Short Circuiting!
All true, no short circuiting!
  1. 邏輯或 (||) 運算子 - OR (||) 運算子表示如果第一個或第二個表示式返回 true,則條件滿足,程式碼將執行。

    但是,如果我們的第一個條件返回 true,則會發生短路,並且第二個表示式將被跳過,因為我們的條件已經滿足。

public class ORExample {
  public static void main(String arg[]) {
    if (true || false || false) {
      System.out.println("True found, condition met, short circuit!");
    } else {
      //
    }
    if (false || true) {
      System.out.println("True found at end, condition met, no short circuit.");
    }
  }
}

輸出:

True found, condition met, short circuit!
True found at end, condition met, no short circuit.

在 Java 中使用按位 AND (&) 和按位 OR (|) 運算子時不會發生短路。

And (&) 運算子 - 檢查所有表示式的結果,當且僅當所有表示式為 true 時才返回 true

Or (|) 運算子 - 比較所有表示式的結果。如果其中一個表示式為,則輸出將返回

if (false | true) {
  // Both conditions evaluated
}
if (false || true) {
  // Only one condition evaluated
}

這兩個條件都將在第一個 if 語句中計算,但在第二個 if 語句中,只計算第一個條件,跳過第二個條件。

只有在使用邏輯 AND (&&) 和邏輯 OR (||) 時才會執行短路。

在 Java 中使用短路的優點

如果預定條件已經滿足或失敗,java 中的短路有助於避免特定時間複雜的任務,從而減少計算時間和複雜性。

例如,如果你檢查 N 個表示式的條件,則需要它們返回 true。如果在任何位置計算返回 false 的表示式,例如 F«N 的 F,它可以顯著減少執行時間。

編譯器不計算表示式的總數,而是跳過 N-F 項。

在 Java 中使用短路的缺點

  1. 繞過邏輯:在某些情況下,短路可以忽略邏輯。假設我們正在使用具有兩個條件的邏輯 OR。第一個條件返回 truefalse,第二個條件呼叫另一個方法來完成程式特定部分的處理。

    如果滿足第一個條件併發生短路,則不會呼叫對處理至關重要的另一個函式,從而繞過邏輯產生問題。

  2. 執行效率較低:短路可以減少程式碼執行時間,並在某些情況下增加它。一些編譯器涉及不同的檢查週期來驗證短路評估,增加了額外的計算。

相關文章 - Java Operator