Java 运算符

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.对象成员访问从左到右
[ ]数组元素访问
( )括号
15a++  a--后缀递增,后缀递减NA
14!逻辑非从右到左
~按位取反
+a -a一元加,一元负
++a --a前缀递增,前缀递减
13( )演员表
new创建对象
12*  /  %乘法、除法、求余从左到右
11+  -加法、减法、字符串连接
10<<  >>>  >>>按位左移、右移和无符号右移
9<  <=  >  >=小于、小于等于、大于、大于等于
instanceof对象实例
8==  !=平等、不平等
7&按位与
6^按位异或
5|按位或
4&&逻辑与
3||逻辑或
2a?b:c条件(三元)运算符从右到左
1=直接赋值
+=  -=  *=  /=  %=按和、差、积、商和余数进行复合赋值
<<=  >>=  >>>=按位左移、右移和无符号右移的复合赋值
&=  ^=  |=按位 AND、XOR 和 OR 进行复合赋值