1.布爾運算
|
and運算符&
不僅可以應用於數字,還可以應用於布爾表達式。
但是,如您所知,有&&
and||
運算符。為什麼我們要使用|
instead of||
和&
instead of &&
?這有什麼意義嗎?好像有。有時。
和邏輯運算符遵循所謂的惰性原則從左到右執行||
。&&
(expression1) || (expression2) || (expression3)
如果expression1
等於,則評估 andtrue
沒有意義:不管結果如何。expression2
expression3
true
因此,在評估表達式時(它們是從左到右評估的),一旦我們得到true
,就會跳過對其餘表達式的評估。如果expression2
包含expression3
方法調用,則不會調用這些方法!
邏輯運算符也是如此&&
:
(expression1) && (expression2) && (expression3)
如果expression1
等於,則評估andfalse
沒有意義:不管結果如何。expression2
expression3
false
這是一個重要的事實,可以讓您編寫如下內容:
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;
也就是說,b
will 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