天天看點

Java運算符優先級(轉)

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 }