我有以下Java代码:
public class myClass {
public static void main(String[] args) {
System.out.println("Hello World!");
int x = 20;
int y = 10;
double z = x++ - y * 7 / --y + x * 10;
System.out.println(z);
}
}
我得到了223.0的输出。但是我想知道逐步的过程。有人请根据操作员优先级对其进行解释。
答案 0 :(得分:3)
我决定写一个答案,因为其中有一个 gotcha 与运算符优先级无关(请参阅步骤3)。
步骤0:输入表达式-
x++ - y * 7 / --y + x * 10;
步骤1:就运算符的优先级而言,递增/递减的优先级高于乘法/除法,并且乘法/除法的优先级高于加法/减法,因此请添加一些括号以明确说明那-
(x++) - (y * 7 / (--y)) + (x * 10);
第2步:接下来要做的是考虑到前后增减运算符的工作原理,用值替换变量-
20 - (10 * 7 / 9) + (21 * 10)
// ^ ^ ^
// | Pre-1 |
// | |
// + -----------------Post+1
步骤3:唯一与运算符优先级无关的东西:对整数操作数执行运算会产生整数结果,即使将表达式的结果分配给浮点类型也是如此。因此,10 * 7 / 9
产生7
-
20 - (7) + (210)
步骤4::表达式是从左到右求值的。
20 - 7 + 210
13 + 210
223
步骤5::将整数结果分配给double
-
223.0