关于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 }
测试结果
总结
总体来说,需要参与运算元素越多的运算符,优先级最低,如三目运算符比取反优先级更低,但是实际开发中估计无需刻意背诵优先级,不确定的使用括号一并解决并且好阅读。
参考博文: