Java 中运算符的优先级

在四则混合运算中, 如果同时出现加减乘除, 我们需要先计算乘除, 后计算加减, 这就是运算符的优先性.

计算机数据作为数学的一种延伸形式, 显然也是支持运算符的优先级的,Java 自然也是如此.

Java 中的优先级参照下表, 数值越大, 优先级越高, 越先得到计算, 同样的优先级, 以结合顺序决定运算顺序:

优先级

运算符 顺明 结合性
16 []
.
()
访问元素数组
访问对象成员
括号
从左向右
15 ++
--
后置自增
后置自减
无法结合
14 ++
--
+
-
!
~
前置自增
前置自减
一元加(正号)
一元减(负号)
一元逻辑否
一元位运算否
从右向左
13 ()
new
调用方法
初始化对象
从右向左
12 * / % 乘, 除, 取模 从左向右
11 + -
+
加 减
字符串拼接
从左向右
10 << >>
>>>
位偏移 从左向右
9 < <=
> >=
instanceof
关系计算
注意: 这里不是位移赋值计算
无法结合
8 ==
!=
相等和不等 从左向右
7 & 位与 从左向右
6 ^ 位异或 从左向右
5 | 位或 从左向右
4 && 逻辑与 从左向右
3 || 逻辑或 从左向右
2 ?: 三元 从右向左
1  =   +=   -=
*=   /=   %=
&=   ^=   |=
<<=  >>= >>>=
赋值 从右向左

关于结合性

当一个表达式具有两个具备相同优先级的运算符时, 该表达式将根据其结合性进行求值.

例如:

x = y = z = 19 被看作 x =(y =(z = 19)), 而三个变量的值都为19, 因为 = 运算符具有从右到左的结合(并且赋值语句求值到右侧的值).

又如:

由于 / 运算符具有从左到右的结合性, 因此将 36/3/4 视为 (36/3) / 4

而有一些运算符是不具有结合性的, 例如:

(x <= y <= z) 和 x++-- 就是无效的表达式, 而作为一元+,一元-的运算符构成的 -+-+-+-1 却是有效的表达式.

那么以上就是有关 Java 中的运算符的优先级的全部内容了, 如果你想进一步了解如何使用 Java 的运算符, 请移步 这里 .