「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)

其餘的一些在演算法中用到的場景,我這裡就不再多少,有興趣的同學可以去研究一下~

運算符優先順序

最高優先順序的在該表上方,最低優先順序的在該表底部

類別

操作符

關聯性

後綴

()[].(點操作符)

左到右

一元

++ – !~

右到左

乘性

* / %

左到右

加性

+ –

左到右

移位

>> >>> <<

左到右

關係

> >= = < <=

左到右

相等

== ~=

左到右

按位與

&

左到右

按位異或

^

左到右

按位或

|

左到右

邏輯與

&&

左到右

邏輯或

||

左到右

條件

?:

從右到左

賦值

=,+=,-=,等等

從右到左

逗號

左到右