1. 程式人生 > >《Java程式設計思想》讀書筆記——位運算子、邏輯運算子以及短路

《Java程式設計思想》讀書筆記——位運算子、邏輯運算子以及短路

我們將布林型別作為一種單位元值對待,所以它多少有些獨特。我們可以對它執行按位“與”、按位“或”、按位“異或”運算,但不能執行按位“非”。對於布林值,按位操作符具有與邏輯操作符相同的效果。

上面這段話摘自《程式設計思想》,意思就是&|在邏輯判斷中,能起到與&&||相同的作用。

public static void main(String[] args) {
    System.out.println(true && true);
    System.out.println(true&true);
}

結果如下:
true
true

雖然看起來結果一樣,但是這二者之間還是有著不可忽視的差異的。

當使用邏輯操作符時,我們會遇到一種“短路”現象。即一旦能夠明確無誤地確定整個表示式的值,就不再計算表示式餘下部分了。這樣可以獲得潛在的效能提升。

public class Test {

    public static boolean cmp(int a, int b){
        System.out.println("hi");
        return a < b;
    }

    public static void main(String[] args) {
        System.out.println(cmp(5,3) && cmp
(5, 4)); System.out.println(); System.out.println(cmp(5,3) & cmp(5, 4)); } } 結果如下: hi false hi hi false

從上面例子中我們發現,當使用&&時,hi只輸出了一次,即邏輯表示式前半部分已經判定為false之後後半部分並未執行,這就是所謂的短路;而使用&時,雖然已判定前半部分為false,但仍執行了後半部分。這就是&&&用於邏輯運算時的異同。同理,|||也有這種“短路”現象。