優先級 | 運算符分類 | 結合順序 | 運算符 |
由
高 到 低 |
分隔符 | 左結合 | . [] ( ) ; , |
一元運算符 | 右結合 | ! ++ -- - ~ | |
算術運算符 移位運算符 |
左結合 | * / % + - << >> >>> | |
關係運算符 | 左結合 | < > <= >= instanceof(Java 特有) = = != | |
邏輯運算符 | 左結合 | ! && || ~ & | ^ | |
三目運算符 | 右結合 | 布爾表達式?表達式1:表達式2 | |
賦值運算符 | 右結合 | = *= /= %= += -= <<= >>= >>>= &= *= |= |
一、一元運算符
因操作數是一個,故稱爲一元運算符。
運算符 | 含義 | 例子 |
- | 改變數值的符號,取反 | -x(-1*x) |
~ | 逐位取反,屬於位運算符 | ~x |
++ | 自加1 | x++ |
-- | 自減1 | x-- |
++x 因爲++在前,所以先加後用。
x++ 因爲++在後,所以先用後加。
二、算術運算符
所謂算術運算符,就是數學中的加、減、乘、除等運算。因算術運算符是運算兩個操作符,故又稱爲二元運算符。
運算符 | 含義 | 例子 |
+ | 加法運算 | x+y |
- | 減法運算 | x-y |
* | 乘法運算 | x*y |
/ | 除法運算 | x/y |
% | 取模運算(求餘運算) | x%y |
這些操作可以對不同類型的數字進行混合運算,爲了保證操作的精度,系統在運算過程中會做相應的轉化。數字精度的問題,我們在這裏不再討論。下圖中展示了運算過程中,數據自動向上造型的原則。
注:1、實線箭頭表示沒有信息丟失的轉換,也就是安全性的轉換,虛線的箭頭表示有精度損失的轉化,也就是不安全的。
2、當兩個操作數類型不相同時,操作數在運算前會子松向上造型成相同的類型,再進行運算。
示例如下:
三、移位運算符
移位運算符操作的對象就是二進制的位,可以單獨用移位運算符來處理int型整數。
運算符 | 含義 | 例子 |
<< | 左移運算符,將運算符左邊的對象向左移動運算符右邊指定的位數(在低位補0) | x<<3 |
>> | "有符號"右移運算 符,將運算符左邊的對象向右移動運算符右邊指定的位數。使用符號擴展機制,也就是說,如果值爲正,則在高位補0,如果值爲負,則在高位補1. | x>>3 |
>>> | "無符號"右移運算 符,將運算符左邊的對象向右移動運算符右邊指定的位數。採用0擴展機制,也就是說,無論值的正負,都在高位補0. | x>>>3 |
四、關係運算符
Java具有完備的關係運算符,這些關係運算符同數學中的關係運算符是一致的。具體說明如下:
運算符 | 含義 | 例子 |
< | 小於 | x<y |
> | 大於 | x>y |
<= | 小於等於 | x<=y |
>= | 大於等於 | x>=y |
== | 等於 | x==y |
!= | 不等於 | x!=y |
instanceof操作符用於判斷一個引用類型所引用的對象是否是一個類的實例。操作符左邊的操作元是一個引用類型,右邊的操作元是一個類名或者接口,形式如下:
obj instanceof ClassName 或者 obj instanceof InterfaceName
關係運算符產生的結果都是布爾型的值,一般情況下,在邏輯與控制中會經常使用關係運算符,用於選擇控制的分支,實現邏輯要求。
需要注意的是:關係運算符中的"=="和"!="既可以操作基本數據類型,也可以操作引用數據類型。操作引用數據類型時,比較的是引用的內存地址。所以在比較非基本數據類型時,應該使用equals方法。
七、賦值運算符
賦值運算符是程序中最常用的運算符了,示例如下:
運算符 | 例子 | 含義 |
+= | x+=y | x=x+y |
-= | x-=y | x=x-y |
*= | x*=y | x=x*y |
/= | x/=y | x=x/y |
%= | x%=y | x=x%y |
>>= | x>>=y | x=x>>y |
>>>= | a>>>=y | x=x>>>y |
<<= | a<<=y | x=x<<y |
&= | x&=y | x=x&y |
|= | x|=y | x=x|y |
^= | x^=y | x=x^y |