结合实例谈Java操作符的优先级和结合性

首先把 Java操作符的优先级和结合性 贴在这,

Java操作符的优先级和结合性

 

优先级

结合性

1

[ ]  .  ( ) (函数呼叫)

从左到右

2

! ~ ++ -- +(单操作数) –(单操作数) ( ) (类型转化) new

3

*  /  %

从左到右

4

+  -

从左到右

5

<<  >>  >>>

从左到右

6

<  <=  >  >=  instanceof

从左到右

7

==  !=

从左到右

8

&

从左到右

9

^

从左到右

10

|

从左到右

11

&&

从左到右

12

||

从左到右

13

? :

14

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

然后看下边题目:

int aa = 8,b = 4; 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; 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。

 

 

你可能感兴趣的:(结合实例谈Java操作符的优先级和结合性)