我是怎么得到这个答案的



我有以下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

相关内容

  • 没有找到相关文章

最新更新