首先看如下程序
int x = -1;
int y = x++ + ++x;
System.out.println("y = " + y);
如果对自增运算符理解的比较清晰的就会很容易得到结果。
但是我认为结果倒是不那么重要,重要的是过程,最终的结果到底是怎么来的。
有一种说法认为,以上程序等同于如下程序
int x = -1;
int y = x + ++x;
x++;
System.out.println("y = " + y);
就是说 x 进行了 ++ 操作后,x 变成了 0,那么最终的结果就是 y = 0 + 0。对于这种说法,我也不知道是否正确,就在 IntelliJ IDEA 中运行了一下,显然不正确。
以 i++ 为例,它并不是一个原子性操作,我们都知道 i++ 是先使用,再自增。在内存中的操作是 初始化一个变量 a,再 a = i
, 然后 i 自增,最后使用的是变量 a。
请看如下程序
int i = 1;
i = i++;
System.out.println("i = " + i);
试试看,计算结果是什么?
通过 IntelliJ IDEA 反编译工具查看它是这样的
int i = 1;
byte a = i;
int b = i + 1;
i = a;
System.out.println("i = " + i);
我们可以看到,最终对于 i 的赋值,其实使用的已经是另一个初始化变量 a 了。
再回到刚开始的那个问题
int x = -1;
int y = x++ + ++x;
System.out.println("y = " + y);
我的理解:
首先
x++
操作之后,x++
的值是 -1,但是此时 x 的值为 0,再进行++x
操作,这里我觉得没有任何问题,值为 1,最终的结果y = -1 + 1
,所以最终结果为 0
以上内容为我对自增运算的理解,如果有不正确的地方,还请指教,谢谢!