Java运算符,表达式和语句
优先级 | 描述 | 运算符 | 结合性 |
---|---|---|---|
1 | 分隔符 | [](). , ; | |
2 | 归类,自增减,逻辑非,正负 | instanceof ++ -- + -! ~ | 右到左 |
3 | 算术乘除 |
| 左到右 |
4 | 算术加减 |
| 左到右 |
5 | 移位运算 | << >> >>> | 左到右 |
6 | 大小关系运算 | < <= > >= | 左到右 |
7 | 相等关系运算 | == != | 左到右 |
8 | 按位与 | & | 左到右 |
9 | 按位异或 | ^ | 左到右 |
10 | 按位或 | | | 左到右 |
11 | 逻辑与 | && | 左到右 |
12 | 逻辑或 | ||
13 | 三目条件运算 | ?: | 左到右 |
14 | 赋值运算 | = += | 右到左 |
注意:
a+++a 应按顺序划分:(a++)+a;
如a=1;则结果为3(1+2);
此处有坑:b=(++a)+(++a)+(++a)结果不确定,与编译器有关。
暂时理解为加号两端的表达式无法确定先计算哪个。
&& ||为逻辑与,也成短路与,a&b中如果a为false,则b不再执行。
& | 为按位与,a&b中即使aweifalse,b仍然计算。
语句中,do-while为:
do{;}while(true);
我们在Android依赖库中使用switch-case语句访问资源ID时会报错误,报的错误是case分支后面跟的参数必须是常数,换句话说出现这个问题的原因是Android library中生成的R.java中的资源ID不是常数。可用if-else代替。