从字节码角度解释i++和++i
@Testpublic void test2(){int i = 10;i = i++;System.out.println(i);}
代码片段如上。
通过class文件反编译得到字节码指令:
0 bipush 102 istore_13 iload_14 iinc 1 by 17 istore_18 getstatic #2 <java/lang/System.out : Ljava/io/PrintStream;>
11 iload_1
12 invokevirtual #3 <java/io/PrintStream.println : (I)V>
15 return
可以看到先是将10推到栈帧里的操作数栈的最底部,随后将其弹出到局部变量表的索引为1的位置,索引为0为this,再把局部变量表里索引为1的位置的数字放到操作数栈的最底部,随后进行局部变量表里的加一操作,此时确实局部变量表里索引为1的地方存储的是数字11,但是随即操作数栈里的顶部的10弹出又写回了局部变量表索引为1处,这时候调用getstatic指令调用指定类的静态域(out),并将其压入栈顶,又把局部变量表里的1放到了操作数栈顶,然后调用实例方法打印出10。
如下是++i的字节码指令:
0 bipush 102 istore_13 iinc 1 by 16 iload_17 istore_18 getstatic #2 <java/lang/System.out : Ljava/io/PrintStream;>
11 iload_1
12 invokevirtual #3 <java/io/PrintStream.println : (I)V>
15 return
可以看见对调了isstore_1和iinc 1 by 1达到了不一样的效果。
从字节码角度解释i++和++i相关推荐
- 深入浅出Java复用类【从字节码角度看toString调用机制、对象代理、组合与继承、转型、final、初始化】
这个世界上有10种人:一种是懂二进制的,一种是不懂二进制的 你觉得类是在什么时候被加载的?[访问static域时,为什么?看完9就明白了] 文章目录 1.深入理解Java中toString方法的调用机 ...
- java异常 字节码,Java字节码角度分析异常处理
目录 从字节码角度来分析:异常处理 1.1 异常-catch // 从字节码角度来分析:异常处理 public class T13_ByteAnalyseException { public stat ...
- Java字节码角度分析多态原理 ——提升硬实力8
在前面的文章中,有详细地介绍java字节码相关的知识,有兴趣的可以提前了解一下. 1.Java字节码的一段旅行经历--提升硬实力1 2.Java字节码角度分析a++ --提升硬实力2 3.Java字节 ...
- Java字节码角度分析:Synchronized ——提升硬实力11
在前面的文章中,有详细地介绍java字节码相关的知识,有兴趣的可以提前了解一下. 1.Java字节码的一段旅行经历--提升硬实力1 2.Java字节码角度分析a++ --提升硬实力2 3.Java字节 ...
- Java字节码角度分析方法调用 ——提升硬实力7
在前面的文章中,有详细地介绍java字节码相关的知识,有兴趣的可以提前了解一下. 1.Java字节码的一段旅行经历--提升硬实力1 2.Java字节码角度分析a++ --提升硬实力2 3.Java字节 ...
- 从源码角度解释 fragment 坑(一)
fragment 自从被Android官方推出以来,就得到了广泛的应用,很多项目中都会使用多个fragment代替Activity进行页面展示,但是由于fragment使用起来相对复杂,如果不是很熟悉 ...
- 从字节码角度分析Byte类型变量b++和++b
1. 下面是一到Java笔试题: 1 public class Test2 2 { 3 public void add(Byte b) 4 { 5 b = b++; 6 } 7 public void ...
- 源码角度解释fragment的坑(二)
如果你已经使用过fragment,我先提出几个问题. 1.按返回键的时候,如果当前的fragment是加入到栈的(其实这个说法不是很准确,因为真正加入栈的是操作fragment的事务),那么这个fra ...
- java try resource_从 Java 字节码角度看 try with resource 语法糖
Java 7中的 try-with-resource,在没有这个语法糖的情况下的等价实现是什么? 以下面的demo为例,这个问题目测99%的人都写不完全正确,不信来战. public static v ...
最新文章
- 最近在招标中评审出一个政府信息化软件
- Cesium界面学习以及隐藏界面控件
- 再谈对比学习:更好的对比样本选择,更好的对比效果
- 当我们谈高性能时,我们谈些什么?(送书活动)
- 高通855比高通675贵多少钱,性能差距有多大?
- [经验分享]采用什么架构才能够承受庞大的大访问量?
- 7-2 搜索树判断 (25 分)
- 微软商店点下载没反应
- 什么是根证书?为什么用户必须下载根证书?
- python输入月份判断天数用函数的方法,python 月份天数
- 安卓系统怎么连接服务器数据库,安卓服务器连接数据库的方法
- java 匹配冒号,java 冒号参数 java 获取冒号后面的参数(正则)实现代码
- Named Entity Recognition for Chinese Social Media with Jointly Trained Embedding 笔记
- RESTORE 还原数据库
- 已解决Building wheels for collected packages: lxml
- 《白帽子讲Web安全》| 学习笔记之Web框架安全
- maven 编译忽略某些文件
- QT5.12.0警告 zero as null pointer constant
- 蓝桥杯培训试题新解——计算两个日期之间的天数间隔
- 编译原理——SysY编译器实践报告
热门文章
- 单词背诵【CodeVS3013】 哈希
- flask高级编程 LocalStack 线程隔离
- 腾讯云CentOS 7 上安装Nginx
- 几种简单的排序算法(JAVA)
- 索引中丢失 IN 或 OUT 参数
- SmtpClient 身份验证失败(authentication failed) 的原因分析
- 操作系统实验报告8:进程间通信—消息机制
- SQL注入_1-6_user-agent注入
- [知识图谱实战篇] 六.HTML+D3实现点击节点显示相关属性及属性值
- 【python数据挖掘课程】二十四.KMeans文本聚类分析互动百科语料