我有以下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的输出。但我想知道一步一步的过程。请有人根据操作员的优先级进行解释。
我决定写一个答案,因为其中有一个与运算符优先级无关的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