@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相关推荐

  1. 深入浅出Java复用类【从字节码角度看toString调用机制、对象代理、组合与继承、转型、final、初始化】

    这个世界上有10种人:一种是懂二进制的,一种是不懂二进制的 你觉得类是在什么时候被加载的?[访问static域时,为什么?看完9就明白了] 文章目录 1.深入理解Java中toString方法的调用机 ...

  2. java异常 字节码,Java字节码角度分析异常处理

    目录 从字节码角度来分析:异常处理 1.1 异常-catch // 从字节码角度来分析:异常处理 public class T13_ByteAnalyseException { public stat ...

  3. Java字节码角度分析多态原理 ——提升硬实力8

    在前面的文章中,有详细地介绍java字节码相关的知识,有兴趣的可以提前了解一下. 1.Java字节码的一段旅行经历--提升硬实力1 2.Java字节码角度分析a++ --提升硬实力2 3.Java字节 ...

  4. Java字节码角度分析:Synchronized ——提升硬实力11

    在前面的文章中,有详细地介绍java字节码相关的知识,有兴趣的可以提前了解一下. 1.Java字节码的一段旅行经历--提升硬实力1 2.Java字节码角度分析a++ --提升硬实力2 3.Java字节 ...

  5. Java字节码角度分析方法调用 ——提升硬实力7

    在前面的文章中,有详细地介绍java字节码相关的知识,有兴趣的可以提前了解一下. 1.Java字节码的一段旅行经历--提升硬实力1 2.Java字节码角度分析a++ --提升硬实力2 3.Java字节 ...

  6. 从源码角度解释 fragment 坑(一)

    fragment 自从被Android官方推出以来,就得到了广泛的应用,很多项目中都会使用多个fragment代替Activity进行页面展示,但是由于fragment使用起来相对复杂,如果不是很熟悉 ...

  7. 从字节码角度分析Byte类型变量b++和++b

    1. 下面是一到Java笔试题: 1 public class Test2 2 { 3 public void add(Byte b) 4 { 5 b = b++; 6 } 7 public void ...

  8. 源码角度解释fragment的坑(二)

    如果你已经使用过fragment,我先提出几个问题. 1.按返回键的时候,如果当前的fragment是加入到栈的(其实这个说法不是很准确,因为真正加入栈的是操作fragment的事务),那么这个fra ...

  9. java try resource_从 Java 字节码角度看 try with resource 语法糖

    Java 7中的 try-with-resource,在没有这个语法糖的情况下的等价实现是什么? 以下面的demo为例,这个问题目测99%的人都写不完全正确,不信来战. public static v ...

最新文章

  1. 最近在招标中评审出一个政府信息化软件
  2. Cesium界面学习以及隐藏界面控件
  3. 再谈对比学习:更好的对比样本选择,更好的对比效果
  4. 当我们谈高性能时,我们谈些什么?(送书活动)
  5. 高通855比高通675贵多少钱,性能差距有多大?
  6. [经验分享]采用什么架构才能够承受庞大的大访问量?
  7. 7-2 搜索树判断 (25 分)
  8. 微软商店点下载没反应
  9. 什么是根证书?为什么用户必须下载根证书?
  10. python输入月份判断天数用函数的方法,python 月份天数
  11. 安卓系统怎么连接服务器数据库,安卓服务器连接数据库的方法
  12. java 匹配冒号,java 冒号参数 java 获取冒号后面的参数(正则)实现代码
  13. Named Entity Recognition for Chinese Social Media with Jointly Trained Embedding 笔记
  14. RESTORE 还原数据库
  15. 已解决Building wheels for collected packages: lxml
  16. 《白帽子讲Web安全》| 学习笔记之Web框架安全
  17. maven 编译忽略某些文件
  18. QT5.12.0警告 zero as null pointer constant
  19. 蓝桥杯培训试题新解——计算两个日期之间的天数间隔
  20. 编译原理——SysY编译器实践报告

热门文章

  1. 单词背诵【CodeVS3013】 哈希
  2. flask高级编程 LocalStack 线程隔离
  3. 腾讯云CentOS 7 上安装Nginx
  4. 几种简单的排序算法(JAVA)
  5. 索引中丢失 IN 或 OUT 参数
  6. SmtpClient 身份验证失败(authentication failed) 的原因分析
  7. 操作系统实验报告8:进程间通信—消息机制
  8. SQL注入_1-6_user-agent注入
  9. [知识图谱实战篇] 六.HTML+D3实现点击节点显示相关属性及属性值
  10. 【python数据挖掘课程】二十四.KMeans文本聚类分析互动百科语料