「Java Grammar」:運算符
- 2019 年 10 月 4 日
- 筆記
運算符簡介
電腦自打誕生以來,用作最多的就是進行計算,而計算離不開運算符,所以運算符在我們的Java語言中的地位舉足輕重,我們現在就來了解一下Java給我們提供的運算符。
從運算的元素的個數來區分,可以分為一元運算符,二元運算符,三元運算符。
其中一元運算符包括:
•+(正數)•-(負數)•++(自增1)•—(自減1)•~(按位取反)•!(邏輯取反)
其實自增和自減也可以看成是特殊的二元運算符
二元運算符包括:
•算術運算符:+ ,-,*,/,%•邏輯運算符:&&,||•關係運算符:==,!=,>,<,>=,<=•位運算符:&,|,^,<<,>>,>>>•賦值運算符:=,+=,-=,*=,/=,%=,<<=,>>=,&=,^=•instanceof運算符:instanceof
三元運算符就只有一種:?:

這些運算相信絕大部分已經被在座的各位所熟知,只有極個別的不是很清楚的,下面我所了解的一些面試熱點知識來進行講解。
一些運算符的小常識
自增,自減的前後位置
老生常談的一個問題,但是還是容易被搞混,自增和自減的順序前後到底有何不同:
•單獨使用的時候,兩種沒有任何區別(溫馨提示:面試的時候切記不要忘記第一點喲)•在表達式中使用的時候,前綴會先進行+1(-1)的運算,而後綴會先運算後進行+1(-1);
在無視掉第一種情況的下,可以簡單記為前綴前,後綴後。
邏輯運算符的短路特性
我們在使用邏輯運算符&&,||的時候,可以利用邏輯運算符的短路特性減少運算次數,所謂短路特性就是當第一個條件可以判斷最終結果的時候,就不會去判斷第二個條件
A && B (當A為false,直接跳過第二個條件的判斷,判定為false) A || B (當A為true,直接跳過第二個條件的判斷,判定為true)
三元運算符
該運算符的主要是決定哪個值應該賦值給變數。
int a , b; a = 10; // 如果 a 等於 1 成立,則設置 b 為 20,否則為 30 b = (a == 1) ? 20 : 30; System.out.println( "Value of b is : " + b ); // 如果 a 等於 10 成立,則設置 b 為 20,否則為 30 b = (a == 10) ? 20 : 30; System.out.println( "Value of b is : " + b );
instanceof
該運算符用於操作對象實例,檢查該對象是否是一個特定類型(類類型或介面類型)。
Vehicle a = new Car(); boolean result = a instanceof Car; System.out.println( result);
位運算符
位運算符可能在我們日常中使用的並不是很多,算是一個小盲區。但是其實這個運算符還是非常的重要的,我們首先來了解一下運算的機制,與其他運算符不同的是,位運算符是要講數值轉換成二進位後,再進行運算。
&


^是按位異或運算符,只有兩個對應的運算位不一致的時候,對應計算出的位置為1,否則為0。
~是按位取反運算符,將每一位取反(1 -> 0,0 ->1)
>>這裡需要注意>>和>>>存在一定的區別:

>> :該數對應的二進位碼整體右移,左邊的用原有標誌位補充,右邊超出的部分捨棄。
>>> :不管正負標誌位為0還是1,將該數的二進位碼整體右移,左邊部分總是以0填充,右邊部分捨棄。
其餘操作部分與<<類似,就不再畫圖演示
- 計算 $m * 2^n$ 次方
2 << 3 = 16; 2 * (2 * 2 * 2) = 16;
- 判斷一個數n的奇偶性
a & 1 = 0; // 偶數 a & 1 = 1; // 奇數
- 不用臨時變數交換兩個數
a = a^b; b = b^a; a = a^b;
- x 的 相反數 表示為 (~x+1)
-x = (~x+1)
- 取絕對值 (a^(a>>31))-(a>>31)
其餘的一些在演算法中用到的場景,我這裡就不再多少,有興趣的同學可以去研究一下~
運算符優先順序
最高優先順序的在該表上方,最低優先順序的在該表底部
|
類別 |
操作符 |
關聯性 |
|---|---|---|
|
後綴 |
()[].(點操作符) |
左到右 |
|
一元 |
++ – !~ |
右到左 |
|
乘性 |
* / % |
左到右 |
|
加性 |
+ – |
左到右 |
|
移位 |
>> >>> << |
左到右 |
|
關係 |
> >= = < <= |
左到右 |
|
相等 |
== ~= |
左到右 |
|
按位與 |
& |
左到右 |
|
按位異或 |
^ |
左到右 |
|
按位或 |
| |
左到右 |
|
邏輯與 |
&& |
左到右 |
|
邏輯或 |
|| |
左到右 |
|
條件 |
?: |
從右到左 |
|
賦值 |
=,+=,-=,等等 |
從右到左 |
|
逗號 |
, |
左到右 |
