欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

java 指令级别理解i++和++i

发布时间:2024/9/30 编程问答 26 豆豆
生活随笔 收集整理的这篇文章主要介绍了 java 指令级别理解i++和++i 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

idea安装jclasslib(略)

执行过程

a++
代码

public class CodeTest {public static void main(String[] args) {int a = 8;a = a++; // a = ++a;System.out.println(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的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。