2

可能重复:
a += b 和 a =+ b 以及 a++ 和 ++a 之间有什么区别?
“x = x++”之后的 x 是什么?

在 Test1 中 i 将其值增加 1 并返回旧值并将其增量值保留在 i 变量中。但在 Test2 中,我将其值增加 1 并返回其旧值,并且增量也发生了。他们是否为未在 i 变量中分配的增量复制 i 。Test2中的操作步骤是什么。

测试1

int i = 0;
System.out.print(i++);
System.out.print(i);

输出 01

测试2

int i = 0;
i = i++;
System.out.println(i);

输出 0

4

3 回答 3

15

该语句i = i++在 Java 中具有明确定义的行为。首先,将 的值i压入堆栈。然后,变量i递增。最后,栈顶的值被弹出并赋值给i. 最终结果是什么都没有发生——智能优化器可以删除整个语句。

于 2012-07-19T23:08:31.560 回答
3

i = i++;是一个棘手的构造,它真正做的是如下所示:

int iOld = i;
i = i + 1;
i = iOld;

您只想i++;用作独立语句。

于 2012-07-19T23:10:34.950 回答
1

++运算符出现在变量之后时,如在您的示例i++中,i 的增量发生在操作结束后。这就是为什么第一个示例中的第一个打印为零,您尚未添加,然后第二个打印为 1。

第二个示例与保存 i,然后将其递增,然后将原始内容放回原处相同。

i++

本身就是一个运算符。

您可以在执行打印操作之前尝试第一个++i会增加 i

于 2012-07-19T23:11:45.570 回答