Java運算符優先級
序列号 | 符号 | 名稱 | 結合性(與操作數) | 目數 | 說明 |
1 | . | 點 | 從左到右 | 雙目 | |
( ) | 圓括号 | 從左到右 | |||
[ ] | 方括号 | 從左到右 | |||
2 | + | 正号 | 從右到左 | 單目 | |
- | 負号 | 從右到左 | 單目 | ||
++ | 自增 | 從右到左 | 單目 | 字首增,字尾增 | |
- - | 自減 | 從右到左 | 字首減,字尾減 | ||
~ | 按位非/取補運算 | 從右到左 | 單目 | ||
! | 邏輯非 | 從右到左 | 單目 | “!”不可以與“=”聯用 | |
3 | * | 乘 | 從左到右 | 雙目 | |
/ | 除 | 從左到右 | 雙目 | 整數除法:取商的整數部分,小數部分去掉,不四舍五入 | |
% | 取餘 | 從左到右 | 雙目 | ||
4 | + | 加 | 從左到右 | 雙目 | |
- | 減 | 從左到右 | 雙目 | ||
5 | << | 左移位運算符 | 從左到右 | 雙目 | |
>> | 帶符号右移位運算符 | 從左到右 | 雙目 | ||
>>> | 無符号右移 | 從左到右 | 雙目 | ||
6 | < | 小于 | 從左到右 | 雙目 | 關系運算符“大于”說明 |
<= | 小于或等于 | 從左到右 | 雙目 | ||
> | 大于 | 從左到右 | 雙目 | ||
>= | 大于或等于 | 從左到右 | 雙目 | ||
instanceof | 确定某對象是否屬于指定的類 | 從左到右 | 雙目 | ||
7 | == | 等于 | 從左到右 | 雙目 | 關系運算符“==”說明 |
!= | 不等于 | 從左到右 | 雙目 | ||
8 | & | 按位與 | 從左到右 | 雙目 | |
9 | | | 按位或 | 從左到右 | 雙目 | |
10 | ^ | 按位異或 | 從左到右 | 雙目 | |
11 | && | 短路與 | 從左到右 | 雙目 | |
12 | || | 短路或 | 從左到右 | 雙目 | |
13 | ? : | 條件運算符 | 從右到左 | 三目 | |
14 | = | 指派運算符 | 從右到左 | 雙目 | |
+= | 混合指派運算符 | ||||
-= | |||||
*= | |||||
/= | |||||
%= | |||||
&= | |||||
|= | |||||
^= | |||||
<<= | |||||
>>= | |||||
>>>= |
說明:
1、算數運算符
+ :加法
- :減法
* :乘法
/ :除法
% :取餘運算
2、關系運算符
< :隻能比較基本類型資料之間的關系,不能比較對象之間的關系。
> : (同關系運算符“<”)
<=: (同關系運算符“<”)
>=: (同關系運算符“<”)
== :若使用該運算符比較兩個對象的引用(變量),則實質上是比較兩個變量是否引用了相同的對象。所謂相同的對象是指,是否是在堆棧(Heap)中開辟的同一塊兒記憶體單元中存放的對象。
若比較兩個對象的引用(變量)所引用的對象的内容是否相同,則應該使用equals()方法,該方法的傳回值類型是布爾值。需要注意的是:若用類庫中的類建立對象,則對象的引用調用equals()方法比較的是對象的内容;若用自定義的類來建立對象,則對象的引用調用equals()方法比較的是兩個引用是否引用了同一個對象,因為第二種情況equals()方法預設的是比較引用。
!= :(同關系運算符“==”)
3、邏輯運算符 (操作符隻能是布爾類型的)
&&
||
!
1 public class Demo {
2 public static void main(String[] args) {
3 // System.out.println((!'1'||'1')+5);//編譯錯誤
4 // System.out.println(!5);//編譯錯誤
5 // System.out.println(('1'||'1')+5);//編譯錯誤
6 // System.out.println(1||2);//編譯錯誤
7 // System.out.println(5-3||4-2);//編譯錯誤
8 System.out.println(5<3||4>3);//true
9 }
10 }
4、位運算符
&
|
^
! :不可以與=聯用,因為!是一進制操作符;不可以對布爾類型的資料進行按位非運算
5、移位運算符(隻能處理整數運算符)
Char、byte、short類型,在進行移位之前,都将被轉換成int類型,移位後的結果也是int類型;移位符号右邊的操作數隻截取其二進制的後5位(目的是防止因為移位操作而超出int類型的表示範圍:2的5次方是32,int類型的最大範圍是32位);對long類型進行移位,結果仍然是long類型,移位符号右邊的操作符隻截取其二進制的後6位。
<< :
>> :若符号位為正,則在最高位插入0;若符号位為負,則在最高位插入1
>>> :無論正負,都在最高位插入0
1 public class Demo {
2 public static void main(String[] args) {
3 // 0000 0000 0000 0101
4 // 0000 0000 0000 0010
5 System.out.println(5>>1);//2
6 // 0000 0000 0000 1000
7 // 0000 0000 0000 0100
8 System.out.println(8>>1);//4
9 System.out.println(3+5>>1);//4
10 System.out.println(3+(5>>1));//5
11 }
12 }