Java 中运算符的结合性

13 2025年5月 | 阅读 3 分钟

Java 运算符是一种特殊的符号,它对多个操作数执行特定的操作并输出结果。

Java 有大量的运算符,它们分为两类。第一类是根据其操作数数量进行分类。第二类是运算符执行的操作的类型或性质。

根据运算符执行的操作类型,可以将它们分为以下几类

  1. 算术运算符
  2. 自增自减运算符
  3. 赋值运算符
  4. 按位运算符
  5. 关系运算符
  6. 逻辑运算符
  7. 杂项运算符

Java 运算符的优先级和结合性

优先级和结合性是 Java 运算符的两个特性。当一个表达式中有两个或多个运算符时,优先级最高的运算符将首先被执行。

例如,考虑方程 1 + 2 * 5。在此,乘法 (*) 运算符首先执行,然后是加法。因为乘法运算符的优先级高于加法运算符。

或者,当一个操作数被两个运算符共享时(上面的例子中 2 被 + 和 * 共享),优先级较高的运算符会处理共享的操作数。通过前面的例子,你应该已经掌握了优先级在运算符执行中的重要性。

然而,情况并不总是像上面的例子那样明显。如果表达式中所有运算符的优先级都相同怎么办?在这种情况下,运算符的第二个特性,即结合性,就发挥作用了。

结合性指定了运算符的执行顺序,可以是自左至右或自右至左。例如,在表达式 a = b = c = 8 中,赋值运算符是从右到左使用的。这意味着值 8 被赋给 c,然后 c 被赋给 b,最后 b 被赋给 a。该表达式可以被括号化为 (a = (b = (c = 8)))。

可以通过在较低优先级的运算符周围加上括号来修改 Java 运算符的优先级,但不能修改结合性。例如,在表达式 (1 + 2) * 3 中,由于括号的优先级高于乘法运算符,所以加法会先执行。

Java 运算符优先级(从高到低)

类别运算符结合性
后缀++ - -从左到右
一元+ - ! ~ ++ - -从右到左
乘法* / %从左到右
加法+ -从左到右
移位<< >>从左到右
关系< <= > >=从左到右
相等== !=从左到右
按位与&从左到右
按位异或^从左到右
按位或|从左到右
逻辑与&&从左到右
逻辑或||从左到右
条件?:从右到左
赋值= += -= *= /= %=>>= <<= &= ^= |=从右到左

Java 运算符结合性

具有相同优先级的运算符遵循运算符组的运算符结合性。Java 中的运算符可以是左结合、右结合或无结合性。左结合运算符从左到右评估,右结合运算符从右到左评估,无结合性的运算符按任意顺序评估。

运算符优先级与运算符结合性

运算符的优先级是指运算符在一个表达式中求值的顺序,而结合性是指同一个组内的连续运算符执行的顺序。

优先级规则指定了运算符的优先级(哪些运算符将首先求值)。