0
int x = 10;
x += x++;

System.out.println(x);

为什么上述陈述的答案是 20 ?

4

6 回答 6

3

运算符 += 是一个加法赋值运算符。就像上面说的 Alya 一样,x += x++相当于x = x + x++,在你的情况下是x = 10 + 10。但是,这是一个非常混乱的声明,我将在本文末尾解释原因。

现在,您可能在想“既然您有 ++,为什么它是 20 而不是 21 (10 + 11)?” 这是有效的。实际上,后增量和前增量之间存在差异。x++ 是后增量,实际上将首先计算 x 的值,然后再增加 x,而 ++x 是前增量,它将增加 x,然后计算 x 的值。

例如,x = 10; System.out.println(x++); System.out.println(x);将打印 10,然后打印 11,因为第一行打印x,然后执行 ++ 计算,x得到下一行打印的 11。相反,x = 10; System.out.println(++x); System.out.println(x);将在两个打印语句上打印 11。

回到我所说x += x++;的非常混乱的原因是因为从技术上讲,在这种情况下不执行 ++ 运算符。x++在技​​术上x=x+1和记住 x+=y 与 x = x+y) 相同,这条线x += x++;有点像说x = x + (x = x + 1);这看起来很奇怪,因为你在一个中执行了 2 个赋值语句并且实际上不会“工作你想要什么”。回到你的例子int x = 10; x += x++;,如果你打印 x,你会得到 20,即使你可以把它看成:x 现在是 x 的值 + x 的值,最后是 + 1。但不幸的是,它不是这样工作的。

为了解决您的问题,如果您将代码从后增量更改为前增量,那么它应该可以工作,即:x+=++x;将打印您的 11 但我认为这非常不可读且有点令人困惑。x+=x; x++; System.out.println(x);更容易理解。

于 2013-04-28T07:56:01.943 回答
2

x++将首先执行。它返回,x然后递增x.1

最后,+=运算符将添加到x的返回值x++,即10

因此,xwill be20并且它将覆盖对x语句的更改x++

于 2013-04-28T07:26:58.863 回答
2

所以 firstx被初始化为10. 然后x++具有更高的优先级,以便首先执行。在这种情况下,“ ++”是后增量(因为它在变量之后,而不是前增量++x)。后增量的意思是“首先使用变量,然后将其加一”,因此在这种情况下,它首先使用xto,10然后在使用后将其递增到 11。然后我们看一下“ +=”,它是“”的简写x = x+x++。所以我们有x = 10+10which = 20。如果您要再次执行此操作,则等于x = 20+20 = 40

在这种特殊情况下,x++不需要x在每次递增后重新分配值。

于 2013-04-28T07:27:52.013 回答
1

诠释 x = 10; x += x++;

将等于 x=x+x

其中x++意思是使用该x值然后增加它,所以它的值将是 10

所以结果将等于20


如果您想查看 的变化x,请参见以下示例:

    int x = 10;
    int y = 10;
    y +=x++;
    System.out.println(y);
    System.out.println(x);

将打印:

y=20
x=11////////////according to x++ and without to overwrite it 
于 2013-04-28T07:25:35.543 回答
1
//
// Shows how increments work.
//
int i = 0;
System.out.println(i);

i++; // Add one
System.out.println(i);

i += 2; // Add two
System.out.println(i);

    i += 3; // Add three
System.out.println(i);

++i; // Add one
System.out.println(i);

i += i; // Added itself
System.out.println(i);

//
// Uses increments and assigns.
//
int v = 0;
v = i++; // Increment after value copy
System.out.println(v);
System.out.println(i);

v = ++i; // Increment before value copy
System.out.println(v);
System.out.println(i);

//输出

0 - 1 3 6 7 14 14 15 16 16

于 2013-04-28T07:31:30.990 回答
0
  x+=x++ first assigns the value to x and then increments (post-increment)
  x+=++x first increments then assign the value to x (pre increment)

编程中有两种类型的增量/减量

  1. pre-increment/decrement
  2. post-increment/decrement

在编程中,这两者具有相同的操作,但性质不同,因为它们都用于递增或递减;它们可以写成,

  x+=1; (increment by 1)
  x-=1; (decrement by 1)

在上述情况下,您也可以使用变量

于 2013-04-28T07:36:20.533 回答