java中i++ ++i字节码解释
来源:互联网 发布:淘宝收获日面具 编辑:程序博客网 时间:2024/05/22 12:58
先上问题:
int i = 0; i = i++;int i = 0; i = ++i;
int i = 0; int j = 0; j = i+++i++;
int i = 0; int j = 0; j = i+++i+++i++;
运算后i和j的值分别是多少;
答案:i = 0;
i = 1;
i = 2,j = 1;
i = 3,j = 3
下面干货,先看i++在java字节码中是什么样的。
iconst指令将常量压入栈中,0入栈;
istore_1将栈顶int型数值存入第一个局部变量,i=0;
iinc指定int型变量增加指定值,i自身空间自加1。
所以最终i的值为1。
再附两个jvm指令:iload 指定的int型局部变量进栈。iadd 栈顶两int型数值相加,并且结果进栈。
针对开篇问题分析:
int i = 0;i = i++;
int i = 0;i = ++i;
int i = 0;int j = 0;j = i+++i++;
int i = 0;int j = 0;j = i+++i+++i++;字节码
0、stack中存入常量0
1、将栈顶int型数值存入第一个局部变量,即i=0
2、将变量i存入stack
3、i自身空间自增,注意stack中值没变
6、将stack中值赋值给变量i
0、stack中存入常量0
1、将栈顶int型数值存入第一个局部变量,即i=0
2、i自身空间自增
5、将变量i存入stack,注意i已经自增,此时i=1
6、将stack中值赋值给变量i
0、stack中存入常量0
1、将栈顶int型数值存入第一个局部变量,即i=0
2、stack中存入常量0
3、将栈顶int型数值存入第二个局部变量,即j=0
4、将变量i存入stack,stack存入值为0
5、i自身空间自增,i=1
8、将变量i存入stack,stack存入值为1
9、i自身空间自增,i=2
12、栈顶两个值相加 0+1=1,并将结果1进栈
13、将栈顶int型数值存入第二个局部变量,即j=1
0~12同场景三
13、将变量i存入stack,stack存入值为2
14、i自身空间自增,i=3
17、栈顶两个值相加 1+2=3 并将结果3进栈
18、将栈顶int数存入第二个局部变量,即j=3
运算结果i=0i=1i=2 j=1i=3 j=3查看java编译字节码文件使用命令:javap -c className
转载请注明来源【IT黑名单】
阅读全文
0 0
- java中i++ ++i字节码解释
- 用java字节码解释i++和++i
- 用java字节码解释i++和++i
- 用java字节码解释i++和++i
- 用java字节码解释i++和++i
- java 中 i=i++ 的解释
- java 中 i=i++ 的解释
- java 中 i=i++ 的解释
- java中 i=i++的解释
- java 中 i=i++ 的解释
- java i++ ++i字节码解析
- Java中对i = i++的解释
- Java中关于i=i++的正确解释方法
- 利用字节码解决java中i=i++遇到的问题
- 从JAVA字节码看++i 和i++ 的区别
- I/O中字节流
- java中i++和++i
- java中i++和++i
- PriorityBlockingQueue
- offee
- Eclipse安装插件地址集合
- POJ 3162 Walking Race——树形dp+尺取+线段树
- 第七节 使用matplotlib可视化数据
- java中i++ ++i字节码解释
- HTML+CSS+JS实现轮播效果
- java中输出格式,包括四舍五入的实例
- 流程图解Spring Framework(十) Spring MVC如何根据请求匹配处理的?
- centos7.3下用户和组的管理
- 买到首批iPhone X的用户先别高兴,刘海体验不佳
- 二叉树的实现与基本操作(C指针实现)
- finalize()
- linux结束jobs的方法