您的位置:首页 > 编程语言 > Java开发

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

2009-03-03 11:12 246 查看
首先把 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。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: