int x = 10;
x += x++;
System.out.println(x);
为什么上述陈述的答案是 20 ?
运算符 += 是一个加法赋值运算符。就像上面说的 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);更容易理解。
x++将首先执行。它返回,x然后递增x.1
最后,+=运算符将添加到x的返回值x++,即10。
因此,xwill be20并且它将覆盖对x语句的更改x++。
所以 firstx被初始化为10. 然后x++具有更高的优先级,以便首先执行。在这种情况下,“ ++”是后增量(因为它在变量之后,而不是前增量++x)。后增量的意思是“首先使用变量,然后将其加一”,因此在这种情况下,它首先使用xto,10然后在使用后将其递增到 11。然后我们看一下“ +=”,它是“”的简写x = x+x++。所以我们有x = 10+10which = 20。如果您要再次执行此操作,则等于x = 20+20 = 40。
在这种特殊情况下,x++不需要x在每次递增后重新分配值。
诠释 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
//
// 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
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)
在上述情况下,您也可以使用变量