运算优先级
所有的数学运算都认为是从左向右运算的,Java 语言中大部分运算符也是从左向右结合的,只有单目运算符、赋值运算符和三目运算符例外,其中,单目运算符、赋值运算符和三目运算符是从右向左结合的,也就是从右向左运算。
乘法和加法是两个可结合的运算,也就是说,这两个运算符左右两边的操作数可以互换位置而不会影响结果。运算符有不同的优先级,所谓优先级就是在表达式运算中的运算顺序。
一般而言,单目运算符优先级较高,赋值运算符优先级较低。算术运算符优先级较高,关系和逻辑运算符优先级较低。多数运算符具有左结合性,单目运算符、三目运算符、赋值运算符具有右结合性。
Java 语言中运算符的优先级共分为 14 级,其中 1 级最高,14 级最低。在同一个表达式中运算符优先级高的先执行。下列出了所有的运算符的优先级以及结合性。
如:++比*的优先级高
byte n1 = 5;
byte n2 = 6;
// 5 + 6 * 7
int n3 = n1++ + n1++ * n1++;
System.out.println(n3); // 47
关系运算符比&|^优先级高
byte b1 = 2;
byte b2 = 3;
System.out.println(b1>b2 & b2>b1); //false
System.out.println(b1>b2 | b2>b1); // true
System.out.println(b1>b2 ^ b2>b1); // true
&优先级高于^高于|
byte b1 = 7;
byte b2 = 9;
byte b3 = 10;
byte b4 = 12;
// 7 & 9 ^ 10 |12
// 7: 0000 0111
// 9: 0000 1001
// &: ----------
// 0000 0001
// 10: 0000 1010
// ^: ------------
// 0000 1011
// 12: 0000 1100
// |: -----------
// 0000 1111
// 15
System.out.println(b1 & b2 ^ b3 | b4);