代码

public class Test{
public static void main(String args[]){
int i=0;
i=i++;

System.out.println(i);
}

}

输出 0 , 说实话我第一看也打错了,看看字节码

public class Test {
public Test();
Code:
0: aload_0
1: invokespecial #1 // Method java/lang/Object."<init>":
()V
4: return

public static void main(java.lang.String[]);
Code:
0: iconst_0
1: istore_1
2: iload_1
3: iinc 1, 1
6: istore_1
7: getstatic #2 // Field java/lang/System.out:Ljava/
io/PrintStream;
10: iload_1
11: invokevirtual #3 // Method java/io/PrintStream.printl
n:(I)V
14: return
}

指令3 iinc 1,1 直接+1到第二个变量i 中,这时候i=1;

再执行istore_1 把操作数栈写回到变量i, 这时候i又变成0

我们把代码改改

public class Test{
public static void main(String args[]){
int i=0;
//i=i++;
i=i+1;
System.out.println(i);
}

}

字节码指令

Compiled from "Test.java"
public class Test {
public Test();
Code:
0: aload_0
1: invokespecial #1 // Method java/lang/Object."<init>":
()V
4: return

public static void main(java.lang.String[]);
Code:
0: iconst_0
1: istore_1
2: iload_1
3: iconst_1
4: iadd
5: istore_1
6: getstatic #2 // Field java/lang/System.out:Ljava/
io/PrintStream;
9: iload_1
10: invokevirtual #3 // Method java/io/PrintStream.printl
n:(I)V
13: return
}

i=i+1 执行的是iadd指令,这是操作数栈里的字节码指令,把新值1压入到操作数栈,再执行istore_1 把操作数栈回写到变量i, 于是i变成了1

最新文章

  1. GCC 预处理、编译、汇编、链接..
  2. iOS之关于 srand() 和rand()
  3. Java设计模式(三)——观察者模式和监听器
  4. 给 VS 2010 选一个好用的代码行数统计器(转)
  5. 如何给澳洲路局写信refound罚金,遇到交通罚款怎么办
  6. notepad++ 各类插件学习记录
  7. php保存远程文件到本地的方法
  8. 【转】使用cocos2d-console工具转换脚本为字节码
  9. 学长们的求职血泪史(C/C++/JAVA)
  10. Selenium webdriver 查找元素
  11. 在 Windows 下远程桌面连接 Linux - VNC 篇
  12. MongoDB shell操作
  13. Elasticsearch【正则搜索】分析&amp;实践
  14. 计蒜客NOIP模拟赛(2) D2T3 银河战舰
  15. ctx中的body无法找到
  16. 汇编语言--微机CPU的指令系统(五)(条件设置字节指令)
  17. 【LGP5176】公约数
  18. python之WSGI与Guincorn
  19. left outer join的on不起作用
  20. 十一、持久层框架(MyBatis)

热门文章

  1. 新一代构建工具gradle学习
  2. mysqldump命令之single-transaction
  3. node -&gt;rman to RAC (迁移)
  4. Sql server日期函数用法
  5. 收集到的关于 freeCodeCamp 中文社区
  6. 曾经很强大的免费 ERP 2BizBox
  7. .Net Core 应用方向 图谱
  8. egg 官方文档之:框架扩展(Application、Context、Request、Response、Helper的访问方式及扩展)
  9. gitlab 可以上传代码,但是 不能 上传 tag 问题
  10. python初始化list列表(1维、2维)