1.布爾運算
|and運算符&不僅可以應用於數字,還可以應用於布爾表達式。
但是,如您所知,有&&and||運算符。為什麼我們要使用|instead of||和&instead of &&?這有什麼意義嗎?好像有。有時。
和邏輯運算符遵循所謂的惰性原則從左到右執行||。&&
(expression1) || (expression2) || (expression3)
如果expression1 等於,則評估 andtrue沒有意義:不管結果如何。expression2expression3true
因此,在評估表達式時(它們是從左到右評估的),一旦我們得到true,就會跳過對其餘表達式的評估。如果expression2 包含expression3方法調用,則不會調用這些方法!
邏輯運算符也是如此&&:
(expression1) && (expression2) && (expression3)
如果expression1等於,則評估andfalse沒有意義:不管結果如何。expression2expression3false
這是一個重要的事實,可以讓您編寫如下內容:
String s = null;
if (s != null && s.length() > 0) {
上面的例子永遠不會給你一個NullPointerException,因為s.length()只有當第一部分s! = null是true.
如果s等於null,運算符左邊的部分&&是false,那麼整個布爾表達式的結果是false,所以右邊的 ( s.length() > 0) 部分不被計算。
如果你使用|operator 或&operator,那麼就沒有惰性求值:每個子表達式都會被求值。
2. Java中的操作優先級
您可能還記得在高中數學課上,乘法運算符的優先級高於加法運算符。括號的優先級更高:首先計算括號中的表達式,然後是乘法和除法,然後是加法和減法。
Java 中的運算符也有優先順序。不同之處在於 a) 它們的數量稍微多一些,b) 對於某些運算符,操作數是從左到右計算的,而對於其他操作符 - 從右到左計算。
這是一張包含所有 Java 運算符的表格:
| 類別 | 操作員 | 關聯的 |
|---|---|---|
| 後綴 | () [] . |
從左到右 |
| 一元 | ++ -- ! ~ |
右到左 |
| 乘法 | * / % |
從左到右 |
| 添加劑 | + - |
從左到右 |
| 轉移 | >> >>> << |
從左到右 |
| 關係型 | > >= < <= |
從左到右 |
| 平等 | == != |
從左到右 |
按位AND |
& |
從左到右 |
Exclusive OR(異或) |
^ |
從左到右 |
按位OR |
| |
從左到右 |
合乎邏輯AND |
&& |
從左到右 |
合乎邏輯OR |
|| |
從左到右 |
| 有條件的 | ?: |
右到左 |
| 任務 | = += -= *= /= %= >>= <<= &= ^= |= |
右到左 |
| 逗號 | , |
從左到右 |
頂行包含具有最高優先級的運算符。括號()用於明確設置優先級。方括號[]用於訪問數組變量特定索引處的元素。點運算符 ( .) 用於使用對對像或類的引用來訪問字段和方法。
運算符在表中越靠下,它們的優先級就越低。
如果您在一個表達式中使用多個運算符,請不要偷懶:添加括號。
在 Java 中,您可以編寫類似於 的內容if (a & 1<< b > ~c),但您不應該這樣做。您不僅要為編譯器編寫代碼,還要為其他程序員編寫代碼。代碼的可讀性越高越好。
3. 前綴和後綴遞增
如您所知,Java 有一個遞增運算符 ( ++) 和一個遞減運算符 ( --)。它們分別將變量的值增加和減少1.
您可能不知道的是,這些運算符有兩種類型:前綴(運算符位於變量之前)和後綴(運算符位於變量之後)。兩種運算符的工作方式略有不同。
在 Java 中,您可以編寫如下表達式:
int a = 5;
int b = a++;
如果++運算符出現在變量之後並且變量是某個表達式的一部分(如上例所示),則表達式將使用變量的當前值,並且只有在之後變量才會增加1.
換句話說,會發生這樣的事情:
int a = 5;
int b = a;
a = a + 1;
也就是說,bwill be 5,並不6像你乍一看所想的那樣。
如果++運算符在變量之前並且變量是某個表達式的一部分,它會首先增加1,然後它的值才會在表達式中使用。
int a = 5;
int b = ++a;
上面的例子等同於下面的例子:
int a = 5;
a = a + 1;
int b = a;
在這裡,b將等於6。
甚至有一個 Java 程序員用來判斷其他人是否也是 Java 程序員的例子:
int a = 5;
int b = ++a + ++a;
是的,你也可以這樣寫。
這個例子將編譯得很好並變成這樣的東西:
int a = 5;
a = a + 1;
int v1 = a;
a = a + 1;
int v2 = a;
int b = v1 + v2;
對於--運營商來說,一切都如出一轍。
GO TO FULL VERSION