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

问题描述 投票:-2回答:1

我有以下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输出。但我想知道一步一步的过程。有人请根据运营商优先顺序解释一下。

java operator-keyword precedence
1个回答
3
投票

我决定写一个答案,因为那里有一个与运算符优先级无关的问题(参见步骤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
© www.soinside.com 2019 - 2024. All rights reserved.