【问题标题】:Java operators, explanation [duplicate]Java 运算符,解释 [重复]
【发布时间】:2014-08-29 10:16:43
【问题描述】:

我知道有几个关于 x++ 操作的问题,我知道 ++x 和 x++ 之间的区别。但现在我必须解决这个问题:

int x = 5;
x += x++ * x++ * x++;

嗯,我知道这应该不会太难,但是,我仍然需要解释这个计算是如何完成的,一步一步,我自己不明白..

【问题讨论】:

  • @user3145373ツ 是的,它编译结果为 215 :)
  • 你运行代码了吗?我会考虑对其进行一些排列,直到您弄清楚发生了什么(0 += x++ * x++ * x++x += x++ * x++x += (x++ * x++) * x++ 等),或咨询JLS
  • 你应该从不编写这样的代码,并且从不需要阅读它。所以你可以争辩说知道解决方案是……毫无意义的。
  • @StephenC 是的,没错.. 但我想知道 :)

标签: java operators


【解决方案1】:

你的代码相当于:

int x = 5;
int originalX = x;
int a = x++;
int b = x++;
int c = x++;
x = originalX + a * b * c;
System.out.println("x = " + x); //215

【讨论】:

【解决方案2】:
x += x++ * x++ * x++;

可以写成:

x = x+ x++ * x++ * x++;

如何评估? x= 5+(5 * 6 * 7) 因为您使用的是后缀。因此,x 的增量值将在第二次使用时可见。

So, final output = 5+ (5*6*7) == 215

【讨论】:

    【解决方案3】:

    x++ 意味着读取值并在被引用的地方使用它,然后递增它。

    所以在你的问题中:-

    int x = 5;
    x  = 5 +   5   * 6   *  7
    x += x++ * x++ * x++;
    x = 215
    

    【讨论】:

      【解决方案4】:
      int x = 5;
      x += x++ * x++ * x++;
      

      首先,设置一些括号,以便更好地查看计算顺序:

      x += ((x++ * x++) * x++);
      

      然后,用它的值替换第一次出现的 x,计算,并继续用更新的值替换:

      5 += ((x++ * x++) * x++);
      
      5 += ((5 * x++) * x++);
      
      5 += ((5 * 6) * x++);
      
      5 += ((5 * 6) * 7);
      
      5 += 210;
      

      现在,这是简单的数学......

      结果应该是:215

      我的编译给了我:215

      所以我认为我的解释是正确的。但我不是 100% 确定...

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-03-29
        • 2017-07-06
        • 2020-11-18
        • 2019-02-16
        • 2017-11-09
        • 2012-08-23
        • 2011-11-06
        相关资源
        最近更新 更多