我是怎么得到这个答案的?

时间:2018-11-19 05:26:11

标签: java operator-keyword operator-precedence

我有以下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的输出。但是我想知道逐步的过程。有人请根据操作员优先级对其进行解释。

1 个答案:

答案 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