java 运算符的优先级

 

运算符结合性
[ ] . ( ) (方法调用) 从左向右
! ~ ++ -- +(一元运算) -(一元运算) 从右向左
* / % 从左向右
+ - 从左向右
<< >> >>> 从左向右
< <= > >= 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

 

posted @ 2017-07-17 15:54  wahaha603  阅读(342)  评论(0)    收藏  举报