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
。
因此,x
will be20
并且它将覆盖对x
语句的更改x++
。
所以 firstx
被初始化为10
. 然后x++
具有更高的优先级,以便首先执行。在这种情况下,“ ++
”是后增量(因为它在变量之后,而不是前增量++x
)。后增量的意思是“首先使用变量,然后将其加一”,因此在这种情况下,它首先使用x
to,10
然后在使用后将其递增到 11。然后我们看一下“ +=
”,它是“”的简写x = x+x++
。所以我们有x = 10+10
which = 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)
在上述情况下,您也可以使用变量