运算符 | 结合性 |
---|---|
[ ] . ( ) (方法调用) | 从左向右 |
! ~ ++ -- +(一元运算) -(一元运算) | 从右向左 |
* / % | 从左向右 |
+ - | 从左向右 |
<< >> >>> | 从左向右 |
< <= > >= instanceof | 从左向右 |
== != | 从左向右 |
& | 从左向右 |
^ | 从左向右 |
| | 从左向右 |
&& | 从左向右 |
|| | 从左向右 |
?: | 从右向左 |
= | 从右向左 |
在 Java 中,经常会用到多个运算符在一起组成判断表达式。但是如果不清楚各个运算符的优先级可能会导致难以察觉的bug.
如果在一个表达式中且 &&与|| 2种运算符时,建议用括号()来括住业务上要执行的优先级。
在以下例子中,第三个输出用括号提升了优先级使代码可读性更好。
1 public class TestAndOr {
2
3 public static void main(String[] args) {
4 // TODO Auto-generated method stub
5 int a =1;
6 int b =2;
7 int c =3;
8
9 //&&的优先级高于|| ,a<0&& b==2 会先运算
10 if(a<0 && b==2 || c==0){
11 System.out.println("yes");
12 }else{
13 System.out.println("no");
14 }
15
16 //&&的优先级高于|| ,c==0 && a<0会先运算
17 if(b==2 || c==0 && a<0 ){
18 System.out.println("yes2");
19 }else{
20 System.out.println("no2");
21 }
22
23 //括号的优先级高与&&,使用括号来提升了 b==2||c==0 的优先级
24 if((b==2 || c==0) && a<0 ){
25 System.out.println("yes3");
26 }else{
27 System.out.println("no3");
28 }
29
30
31 }
32
33 }
34
35
36 //结果
37 no
38 yes2
39 no3