結合執行個體談Java操作符的優先順序和結合性

來源:互聯網
上載者:User

首先把 Java操作符的優先順序和結合性 貼在這,

Java操作符的優先順序和結合性

 

優先順序

結合性

1

[ ]  .  ( ) (函數呼叫)

從左至右

2

! ~ ++ -- +(單運算元) –(單運算元) ( ) (類型轉化) new

從右至左

3

*  /  %

從左至右

4

+  -

從左至右

5

<<  >>  >>>

從左至右

6

<  <=  >  >=  instanceof

從左至右

7

==  !=

從左至右

8

&

從左至右

9

^

從左至右

10

|

從左至右

11

&&

從左至右

12

||

從左至右

13

? :

從右至左

14

=  +=  -=  *=  /=  %=  ^=  <<=  >>=  >>>=

從右至左

然後看下邊題目:

int aa = 8,b = 4;</p><p>int expr = aa++%++b*2;

可以得出很多種答案的,那時候我一連做了幾次都沒有得出最終的正確答案,你可以試試看

然後,我們解析一下,要知道的 ++優先順序是2 右結合, * / %是一個層級上的, 優先順序是3 左結合的, 還要知道 ++(後自增)是先運算後增加的,前自增是先增加後運算的,好的,那麼我們的答案就應該是6, 首先 計算a++ 此時a的值仍為8,然後計算 ++b 此時b的值為5,再計算 8%5 結果3,最後3*2=6,下邊再引用a的話 a的值就為9了,因為運算完了要增加的嘛, b的值為5,

 

int expr = 4 << 2 + 1;

 

這個題目容易,知道 + 的優先順序比 <<的優先順序高(呵呵 有點不可思議吧 但是事實如此),就知道答案 32。

 

接下來的這個:

int a = 255;<br />int expr = (byte)a + (((byte)a) & 0xff);

 

在這裡要 說明一個int轉byte的小規律:

 

int a----->byte b (b = (byte)a);

a為正數:b = a -  256 ,如果b > 127 繼續b = b - 256,直至 範圍落在 -128 --127,

a為負數:b = a + 256 ,如果b < -128 繼續b = b + 256,直至 範圍落在 -128 -- 127。

還要知道 byte short char 作為運算元參與運算時候 系統都會先把他們轉成int數值來參與運算。

 

(byte)255 為 -1, -1 轉為int 1111 1111 1111 1111 ,和 0xff(0000 0000 1111 1111)相與,結果 -1 + 256 = 255。

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.