《Java程式設計思想》讀書筆記——位運算子、邏輯運算子以及短路
阿新 • • 發佈:2018-12-11
我們將布林型別作為一種單位元值對待,所以它多少有些獨特。我們可以對它執行按位“與”、按位“或”、按位“異或”運算,但不能執行按位“非”。對於布林值,按位操作符具有與邏輯操作符相同的效果。
上面這段話摘自《程式設計思想》,意思就是&
和|
在邏輯判斷中,能起到與&&
和||
相同的作用。
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,但仍執行了後半部分。這就是&
與&&
用於邏輯運算時的異同。同理,|
與||
也有這種“短路”現象。