在开始阅读本文之前,您应该对 Java运算符 有基本的了解。
现在,看看下面的语句
int myInt = 12 - 4 * 2;
变量myInt的值是多少?是(12 - 4)*2
,即16
?还是12 - (4 * 2)
,即4
?
当两个运算符共享一个公共操作数(本例中为4
)时,具有最高优先级的运算符将首先被计算。
在Java中,*
的优先级高于-
。因此,乘法在减法之前执行,变量myInt的值将是4。
运算符优先级表
下表列出了Java中运算符的优先级;表中出现的位置越高,优先级越高。
运算符 | 优先级 |
---|---|
后缀自增自减 | ++ -- |
前缀自增自减和一元运算符 | ++ -- + - ~ ! |
乘法 | * / % |
加法 | + - |
移位 | << >> >>> |
关系 | < > <= >= instanceof |
相等 | == != |
按位与 | & |
按位异或 | ^ |
按位或 | | |
逻辑与 | && |
逻辑或 | || |
三元 | ? : |
赋值 | = += -= *= /= %= &= ^= |= <<= >>= >>>= |
示例:运算符优先级
class Precedence {
public static void main(String[] args) {
int a = 10, b = 5, c = 1, result;
result = a-++c-++b;
System.out.println(result);
}
}
输出:
2
前缀++
的运算符优先级高于-
减法运算符。因此,
result = a-++c-++b;
等同于
result = a-(++c)-(++b);
在处理单个表达式中的多个运算符和操作数时,您可以像上面的示例一样使用括号以获得清晰度。括号内的表达式将首先被计算。
Java中运算符的结合性
如果一个表达式有两个具有相似优先级的运算符,则根据其结合性(从左到右或从右到左)计算表达式。让我们举个例子。
a = b = c;
在这里,变量c的值被赋给变量b。然后变量b的值被赋给变量a。为什么?这是因为=
运算符的结合性是从右到左。
下表显示了Java运算符的结合性及其结合性。
您无需记住所有内容。大多数时候,运算符的优先级和结合性本身就很有意义。在有疑问时,您可以随时参考本文。此外,如果您认为括号能让您的代码更容易理解,您也可以使用括号。