我有以下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输出。但我想知道一步一步的过程。有人请根据运营商优先顺序解释一下。
我决定写一个答案,因为那里有一个与运算符优先级无关的问题(参见步骤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