Java 运算符优先级
运算符优先级(运算顺序)是一组规则,反映了首先执行哪些过程的约定以便计算给定的表达式。
例如,乘法的优先级高于加法。因此,表达式 1 + 2 × 3 被解释为具有值 1 + (2 × 3) = 7,而不是 (1 + 2) × 3 = 9。当表达式中使用指数时,它优先于两者加法和乘法。因此 3 + 52 = 28 和 3 × 52 = 75。
运算符关联性
运算符关联性是方向其中计算表达式。例如:
int x = 10;
int y = 20;
// = 运算符的结合性是
//从左到右,因此x将变为20
x = y;
由于=的结合性是从左到右。因此,x 被赋予 y 的值。
示例:
下面的示例说明了 Java 中的运算符优先级。
public class MyClass {
public static void main(String[] args) {
int retval1, retval2, retval3;
//首先评估 5 * 2
retval1 = 15 - 5 * 2;
//上面的表达式相当于
retval2 = 15 - (5 * 2);
//强制编译器首先计算 15 - 5
retval3 = (15 - 5) * 2;
System.out.println("15 - 5 * 2 = " + retval1);
System.out.println("15 - (5 * 2) = " + retval2);
System.out.println("(15 - 5) * 2 = " + retval3);
}
}
上述代码的输出将是:
15 - 5 * 2 = 5
15 - (5 * 2) = 5
(15 - 5) * 2 = 20
Java 运算符优先级表
下表列出了 Java 运算符的优先级和结合性。运算符按优先级降序从上到下列出。优先级较高的运算符先于优先级相对较低的运算符进行计算。当运算符具有相同优先级时,运算符的结合性决定了运算的执行顺序。
优先级 | 运算符 | 描述 | 关联性 |
---|---|---|---|
16 | . | 对象成员访问 | 从左到右 |
[ ] | 数组元素访问 | ||
( ) | 括号 | ||
15 | a++ a-- | 后缀递增,后缀递减 | NA |
14 | ! | 逻辑非 | 从右到左 |
~ | 按位取反 | ||
+a -a | 一元加,一元负 | ||
++a --a | 前缀递增,前缀递减 | ||
13 | ( ) | 演员表 | |
new | 创建对象 | ||
12 | * / % | 乘法、除法、求余 | 从左到右 |
11 | + - | 加法、减法、字符串连接 | |
10 | << >>> >>> | 按位左移、右移和无符号右移 | |
9 | < <= > >= | 小于、小于等于、大于、大于等于 | |
instanceof | 对象实例 | ||
8 | == != | 平等、不平等 | |
7 | & | 按位与 | |
6 | ^ | 按位异或 | |
5 | | | 按位或 | |
4 | && | 逻辑与 | |
3 | || | 逻辑或 | |
2 | a?b:c | 条件(三元)运算符 | 从右到左 |
1 | = | 直接赋值 | |
+= -= *= /= %= | 按和、差、积、商和余数进行复合赋值 | ||
<<= >>= >>>= | 按位左移、右移和无符号右移的复合赋值 | ||
&= ^= |= | 按位 AND、XOR 和 OR 进行复合赋值 |