本文共 512 字,大约阅读时间需要 1 分钟。
之前一直有这种题,只知道++i,运算前加1,i++运算后加1,但具体他是怎么实现的起始一直不太清除,今天闲来无事,通过翻看字节码,彻底将这类题映在脑子里。
先上代码
int i = 1; i = ++i+i++;
此时i的值是多少呢?在之前遇到这种题的时候,很多时候我都是靠猜得到答案,今天通过翻看指令,总算理解了它的过程。
指令
0 iconst_1 将int型为1的变量压入栈 1 istore_1 将栈顶的int型存入第二个本地变量 2 iinc 1 by 1 将局部表中的位置的变量按常量1增加 第一个1代表索引,第二个1常量 5 iload_1 将局部表中的位于1位置的变量压入栈 6 iload_1 7 iinc 1 by 1 将局部表中的位置的变量按常量1增加 第一个1代表索引,第二个1常量10 iadd 将栈顶的两元素相加存放在栈顶11 istore_1 将栈顶的int型存入第二个本地变量12 return
由此可见,当代码运行时,++i的操作是在变量写入栈之前对局部变量进行加1操作,i++操作是在局部变量被压入栈之后再对局部变量中的变量进行加一操作。所以最后答案,我们可以得出i=4。
转载地址:http://wfwzi.baihongyu.com/