【问题标题】:java expression calculation and operator precedencejava表达式计算和运算符优先级
【发布时间】:2020-06-23 07:28:59
【问题描述】:

我有问题逐步java表达式计算

System.out.println(++x + x++ * y-- - --y);

我知道这个优先级: 1. 后缀一元 2.前缀一元 3. 乘法 4.添加剂

但是当我用这个优先级计算时,结果如下: // 12 + 11 * 19 - 18 谁能帮帮我

【问题讨论】:

    标签: java expression operator-keyword operator-precedence


    【解决方案1】:

    你可以从下面给出的例子中理解它:

    public class Main {
        public static void main(String[] args) {
            int x = 5, y = 10;
            System.out.println(++x + x++ * y-- - --y);// 6 + 6 * 10 - 8 = 58
        }
    }
    

    计算步骤:

    1. ++x = 6
    2. 6 + x++ * y-- = 6 + 6 * 10 = 6 + 60 = 66(之后y会因为y--而变成9x会因为x++而变成7,但是x的这个增加值从未用于后续计算)
    3. 66 - 8 = 58(在y66减去之前,它将变成8,因为--y

    【讨论】:

      【解决方案2】:

      后缀一元在变量评估之后应用,与前缀相反,在评估之前应用,您的表达式可以重写:

      int x_prefix = x + 1; // ++x
      int y_prefix = y - 1; // --y
      
      System.out.println(x_prefix + x * y - y_prefix);
      
      int x = x + 1; // x++
      int y = y - 1; // y--
      

      你写运算符优先级,是的,但是每个运算符都有自己的行为,在后缀递增的情况下,当然必须先评估,但它的行为是返回当前变量,然后递增它的值。

      注意:我只是按原样重写了你的表达式,如果你在同一个表达式中使用变量后缀递增,下一次访问看到变量递增:

      int x = 1;
      
      System.out.println(x++ + x++); // 1 + 2
      System.out.println(x) // 3
      

      为了完整性:

      int x = 1;
      
      System.out.println(++x + ++x); // 2 + 3
      System.out.println(x) // 3
      

      【讨论】:

        猜你喜欢
        • 2014-01-30
        • 2011-07-24
        • 2021-10-04
        • 1970-01-01
        • 2012-12-13
        • 2013-08-04
        • 2017-10-25
        • 2013-12-28
        相关资源
        最近更新 更多