【问题标题】:what will be the reason behind the output of java code?java代码输出背后的原因是什么?
【发布时间】:2014-10-17 02:56:09
【问题描述】:

考虑以下简单的 java 代码

public static void main(string args[])
{
  int x=10;
  int y;

  y=x++;
  y=y--;

  System.out.println(y);
}

这里的输出是 10。但实际上 y 变量递减。 但根据我的输出应该是 9。 是什么原因?

【问题讨论】:

  • y=y--y=y 相同。它对y的值没有影响在赋值的末尾
  • y = x++; 相同的y = x; x += 1; , y = y--; (y = y , y -=1)

标签: java operators increment decrement


【解决方案1】:

后缀自增运算符的工作原理如下:

  • 增加操作数
  • 返回操作数的前一个值

后缀自减运算符的工作原理如下:

  • 递减操作数
  • 返回操作数的前一个值

因此,以下代码的工作方式如下:

x = 10;  // x == 10
y = x++; // x == 11, y == 10
y = y--; // y ==  9, y == 10

如您所见,y = y-- 等价于y = y

对操作结束时y的值没有影响。

【讨论】:

    【解决方案2】:

    您需要了解前缀和后缀运算符。

    y=x++ 表示将 x 赋值给 y,然后将 x 加 1;

    y=++x 表示将 x 递增,然后将递增后的值赋给 y。

    如果您了解这种差异,那么代码的作用就很明显了。

    【讨论】:

    • 我不知道这个答案与上面的答案有何不同,所以它得到了 2 票! +1
    • 我不认为你所说的等同于巴拉克的回答。您的回答意味着递减发生在分配之后。根据您的说法,y=y-- 等同于y=y; y=y-1;,这与其他答案所说的不同......
    • 在示例代码中向初学者解释某些内容与用简单的英语解释相同的内容通常会让人感到困惑。
    【解决方案3】:

    后减运算符返回变量的旧值。所以当你写

    y = y--;
    

    它递减y,然后将旧值分配回y。就好像你写的:

    old_y = y; // Save old value
    y = y - 1; // perform y-- decrement
    y = old_y; // Assign the saved value
    

    【讨论】:

      【解决方案4】:

      这是发生了什么

      int x=10; 
      

      声明一个可变的 x 并为其赋值 10。

      int y;
      

      声明一个变量 y

      y=x++;
      

      increment x therefore x=11 and return its old value therefore y=10

      y=y--;
      

      在当前点递减 y,因此 y=9,并返回其旧值 10,现在被 y 捕获,因此 y=10。

      System.out.println(y);
      

      输出

      10
      

      【讨论】:

        【解决方案5】:

        x = 10; // x == 10

        y = x++; //这里第一个 Y 被赋值为 10 并将 x 增加 1

        y = y--;//这里先给Y赋值10,然后y减1

        因为如果我们使用 Postincrement 或 postdecrement 首先它为变量赋值,然后它执行递增或递减。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-04-07
          • 2020-01-26
          • 2021-09-14
          • 1970-01-01
          • 2011-06-20
          • 1970-01-01
          • 1970-01-01
          • 2018-08-31
          相关资源
          最近更新 更多