Java运算符优先级

关于Java运算符优先级内容,单独记录一下,以前虽然有概念但是比较模糊,具体使用过程中可能还是不太清楚,只会常用的几种优先级。

常见运算符分类

常见运算符根据参与运算的变量个数,可以粗略分为一元运算、二元运算和三元运算,此外还包括'( )',和'='号赋值运算。

(1)一元运算:!、++、--、~,即 非、自增、自减和取反

(2)二元运算:+、-、*、/、%、位运算(>>、<<、>>>)、关系运算(比较)、逻辑运算(&、|、^)

(3)三元运算:三元运算也叫三目运算

常见运算符优先级

大体上来说优先级顺序是()→一元运算→二元运算→三元运算→=,即()的优先级最高,=号赋值的优先级最低,具体参考代码。

 1 public class OperatorPriority{
 2     public static void main(String[] args){
 3         //运算符优先级测试
 4         //算术运算比关系运算优先级高
 5         System.out.println(3>1+4);//false
 6         System.out.println(3>2*5);//false
 7         //关系运算优先级大于逻辑运算
 8         System.out.println(3>1&true);//true
 9         System.out.println(3>1^true);//false
10         //算术运算比位运算优先级高
11         System.out.println(1+5<<2);//24
12         System.out.println(1+5>>1);//3
13         //位运算比关系运算优先级高
14         System.out.println(5>1>>2);//true
15         System.out.println(5>(1&1));//true
16         System.out.println(5>-6>>>1);//false
17         //取反优先级大于算术
18         System.out.println(~5+1);//-5,不是-7
19         System.out.println(~5*2);//-12
20 
21         //三元运算符
22         //算术比三元高
23         System.out.println(3>2?1:20+20);//1,不是21
24         //三元比关系运算低
25         Object r=3>2?1:9<3;//r=3>2?1:false 
26         System.out.println(r);//如果三元比关系高,返回false,否则返回1
27         //三元比逻辑低 结果为true
28         System.out.println(3>2?true:false&&false);//如果三元运算符优先,结果为false
29         //三元比位(& | ^)低,结果是5
30         System.out.println(3>2?5:8&1);//三元大于位,结果是1,三元小于位,结果是5    
31     }    
32 }

测试结果

总结

总体来说,需要参与运算元素越多的运算符,优先级最低,如三目运算符比取反优先级更低,但是实际开发中估计无需刻意背诵优先级,不确定的使用括号一并解决并且好阅读。

参考博文:

(1)https://www.cnblogs.com/gavin-yao/p/10595835.html

原文地址:https://www.cnblogs.com/youngchaolin/p/11294056.html