我來具體說明:
int i=0;
i=i++;
上述兩行java代碼bytecode如下:
iconst_0 //把常量0放到堆棧
istore_1 //把堆棧上的數(上面那個0)放到存儲位置1,也就是i的存儲位置,所以i的值就是0了
iload_1 //加載位置1上的整數值到棧頂,就是i,因此棧頂的值是0
iinc 1,1 //把位置1的數,也就是i,自增1,因此i變成了1(注意:iinc指令不會操作堆棧)
istore_1 //把棧頂的那個數,也就是0,存到位置1,因此i的值是0.
int i=0;
i=++i;
-->
iconst_0 //把常量0放到棧頂
istore_1 //把堆棧上的數(上面那個0)放到存儲位置1,也就是i的存儲位置,所以i的值就是0了,棧頂值不變
iinc 1,1 //把位置1的數,也就是i,自增1,因此i變成了1(注意:iinc指令不會操作堆棧)
iload_1 //加載位置1的數,也就是i的值,1,到棧頂
istore_1//把棧頂的值存到位置1,因此i的值就是1了。
了解字節碼的操作:
http://blog.csdn.net/BU_BetterYou/archive/2008/06/16/2553108.aspx