可能重复:
What is the difference between a += b and a =+ b , also a++ and ++a?
What is x after “x = x++”?
在Test1中,i将其值递增1并返回旧值并将其增量值保存在i变量中。但是在Test2中,我将其值增加1并返回其旧值,并且还会发生增量。他们是否为i中的变量分配了i的副本。 Test2中的操作步骤是什么。
测试1
int i = 0;
System.out.print(i++);
System.out.print(i);
输出01
的Test2
int i = 0;
i = i++;
System.out.println(i);
输出0
答案 0 :(得分:15)
语句i = i++
在Java中具有明确定义的行为。首先,i
的值被压入堆栈。然后,变量i
递增。最后,弹出堆栈顶部的值并将其分配到i
。最终结果是没有任何反应 - 智能优化器可以删除整个语句。
答案 1 :(得分:3)
i = i++;
是一个棘手的构造,它的确如下所示:
int iOld = i;
i = i + 1;
i = iOld;
您只想将i++;
用作独立声明。
答案 2 :(得分:1)
当++
运算符出现在变量之后时,如示例i++
中,i的增量在操作结束后发生。
这就是为什么第一个例子中的第一个打印是零,你还没有添加,然后第二个是1。
第二个示例与保存i相同,然后将其递增,然后放回原件。
i++
是运营商本身。
您可以使用++i
对第一个进行试验,这将在执行打印操作之前增加i