int x = 10;
x += x++;
System.out.println(x);
为什么上述陈述的答案是20?
答案 0 :(得分:3)
operator + =是一个加法赋值运算符。就像上面说的Alya一样,x += x++
相当于x = x + x++
,在你的情况下是x = 10 + 10
。然而,这是一个非常混乱的陈述,我将在本文末尾解释原因。
现在,你可能在想“因为你有++,为什么它是20而不是21(10 + 11)?”这是有效的。实际上,后增量和预增量之间存在差异。 x ++是后增量,实际上将首先计算x的值,然后是增量x,而++ x是预增量,它将增加x,然后THEN计算x的值。
例如,x = 10; System.out.println(x++); System.out.println(x);
将打印10然后打印11,因为第一个打印行打印x
,然后THEN执行++计算,使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);
更容易理解。
答案 1 :(得分:2)
x++
将首先执行。它返回x
,然后x
增加1
。
最后,+=
运算符会将x
的返回值x++
添加到10
。
因此,x
将为20
,它会通过语句x
覆盖对x++
的更改。
答案 2 :(得分:2)
因此,首先将x
初始化为10
。然后x++
具有更高的优先级,以便首先执行。在这种情况下,“++
”是一个后增量(因为它在变量之后而不是预增量,即++x
)。后增量意味着“首先使用变量然后将其增加1”,因此在这种情况下,它首先使用x
为10
,然后在使用后将其增加到11。然后我们查看“+=
”,这是“x = x+x++
”的简写。所以我们x = 10+10
= 20
。如果你再把它拿出来,那就等于x = 20+20 = 40
。
在这种特殊情况下,x++
不是必需的,因为x
在每次递增后都会重新赋值。
答案 3 :(得分:1)
int 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
答案 4 :(得分: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
答案 5 :(得分: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)
您也可以在上述情况下使用变量