java 指令级别理解i++和++i
生活随笔
收集整理的这篇文章主要介绍了
java 指令级别理解i++和++i
小编觉得挺不错的,现在分享给大家,帮大家做个参考.
idea安装jclasslib(略)
执行过程
a++
代码
打开jclasslib查看指令
看右边的字节码部分,
0 bipush 8 --> 把8这个值压栈,就是先把8这个值压入操作栈底部;
2 istore_1 -->把a这个本地变量存入本地变量表的1号位置,如如;
3 iload_1 -->把操作栈里的8弹栈给本地变量表里的a,此时a是8;
4 iinc 1 by 1 -->本地变量表的8递增1,变成9;
7 istore_1 -->把操作栈里的值,此时还是8在给到本地变量表的1号位置,所以8给到1好位置;
8 getstatic -->(虚拟机里的调用,不重要,不管。)
11 iload_1 -->把操作栈里的8弹栈给本地变量表里的a,所以a是8;
12 invokevirtual -->(虚拟机里的调用,不重要,不管。)
15 return -->返回。
所以虽然做了++的操作,但是栈里的值仍然是8,所以返回8;
++a
看出来与a++的区别是,先iinc 1 by 1 了才iload_1,所以a就先递增了才赋值到本地常量表。
所以a++是8,++a是9.
总结
以上是生活随笔为你收集整理的java 指令级别理解i++和++i的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: 电脑开机过程
- 下一篇: 指令级别解释对象创建过程和DCL为什么要