int x=0
int y=++x + x++ + x++
先计算++x,则变为int y=1 + x++ + x++,此时x=1;再计算x++,因为是先使用x再进行自增运算,所以变为int y=1 + 1 + x++,此时x为2;继续计算x++,同理,先使用x再进行自增运算,所以变为int y=1 + 1 + 2,此时进行x自增运算,x为3。
int y=++x + x++ + x++
先计算++x,则变为int y=1 + x++ + x++,此时x=1;再计算x++,因为是先使用x再进行自增运算,所以变为int y=1 + 1 + x++,此时x为2;继续计算x++,同理,先使用x再进行自增运算,所以变为int y=1 + 1 + 2,此时进行x自增运算,x为3。
即x++是先赋值后加1,++x是先加1然后赋值。
下面是字节码文件分析:
p++分3步执行,执行后p的值在内存中被更新,但是后续使用这个表达式的值用的是加1之前的值(存在寄存器里)。
++p分两步执行,之后使用这个表达式的值用的是内存里p更新后的值(如果不用值一条指令就够了)。
如下例: