在Test1中,i将其值增加1,然后返回旧值,并将其增量值保留在i变量中。但是在Test2中,i将其值增加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
该语句i = i++在Java中具有明确定义的行为。首先,将的值i压入堆栈。然后,变量i增加。最后,弹出堆栈顶部的值并将其分配给i。最终结果是什么也没发生- 智能优化器可以删除整个语句。
i = i++
i