这段程序大概这样:


public static void main(String[] args){
int a = 2;
System.out.println(a+++a++);
}

编译后的字节码为:


public static void main(java.lang.String[]);
descriptor: ([Ljava/lang/String;)V
flags: ACC_PUBLIC, ACC_STATIC
Code:
stack=3, locals=2, args_size=1
0: iconst_2 /*将int型2推送至栈顶*/
1: istore_1 /*将栈顶int型数值存入第二个本地变量,这里就是完成a=2的步骤*/
2: getstatic #2 // Field java/lang/System.out:Ljava/io/PrintStream; /*获取指定类的静态域,并将其值压入栈顶*/
5: iload_1 /*将第二个int型本地变量推送至栈顶,现在栈顶的值为a的值 2 */
6: iinc 1, 1 /*将指定int型变量增加指定值,现在a的值为3 */
9: iload_1 /*将第二个int型本地变量推送至栈顶,栈顶的值为 3 */
10: iinc 1, 1 /*将指定int型变量增加指定值,现在a为4*/
13: iadd /*将栈顶两int型数值相加并将结果压入栈顶,前面压入栈顶的值分别为2和3,所以现在栈顶的值为 5 */
14: invokevirtual #3 // Method java/io/PrintStream.println:(I)V
17: return
LineNumberTable:
line 4: 0
line 5: 2
line 6: 17
}
SourceFile: "Test.java"

现在,如果把程序换一下:


public static void main(String[] args){
int a = 2;
System.out.println(a+++(++a));
}

现在字节码为:


public static void main(java.lang.String[]);
descriptor: ([Ljava/lang/String;)V
flags: ACC_PUBLIC, ACC_STATIC
Code:
stack=3, locals=2, args_size=1
0: iconst_2
1: istore_1 /*完成a=2的赋值*/
2: getstatic #2 // Field java/lang/System.out:Ljava/io/PrintStream;
5: iload_1 /*a的值压入栈顶,为 2 */
6: iinc 1, 1 /*a自增长 a=3*/
9: iinc 1, 1 /*a自增长 a=4*/
12: iload_1 /*a值压入栈顶,为 4*/
13: iadd /*两值相加,为 6*/
14: invokevirtual #3 // Method java/io/PrintStream.println:(I)V
17: return
LineNumberTable:
line 4: 0
line 5: 2
line 6: 17
}
SourceFile: "Test.java"

最新文章

  1. Windows批处理:自动开关程序
  2. NHibernate系列文章二十七:NHibernate Mapping之Fluent Mapping基础(附程序下载)
  3. [BZOJ1116][Poi2008]LCO(并查集)
  4. 再见Unity3d的死循环
  5. SQL Server锁分区特性引发死锁解析
  6. 业务系统的JVM启动参数推荐
  7. HDU2111 Saving HDU 【贪心】
  8. 让人头疼的CSS兼容
  9. Pandas逐行读取Dateframe并转为list
  10. Django学习手册 - CURD组件
  11. ios the request was denied by service delegate for reason unspecified
  12. 利用React Native 从0到1 开发一款兼容IOS和android的APP(仿造京东)
  13. 洛谷P3241 开店
  14. composer概念学习
  15. 按键精灵如何调用Excel及按键精灵写入Excel数据的方法教程---入门自动操作表格
  16. Javascript中Generator(生成器)
  17. Maven打包时,不包含jar包
  18. ORALCE表的约束条件
  19. UEditor显示Invalid or unexpected token
  20. CodeForces 584D Dima and Lisa

热门文章

  1. 全面理解 javascript 的 argements caller callee call apply 之caller
  2. ssm框架搭建和整合流程
  3. 带着新人看java虚拟机01
  4. C#如何根据类的名词创建类的实例
  5. CSS关联选择器的大致类型总结
  6. 全球排名第一的开源ERP Odoo v12 最新一键安装体验版正式发布
  7. 3.App Inventor 2项目导入与导出
  8. iOS----------Mac维修预约-如何找到电脑维修单
  9. Button控件的点击事件
  10. Git - git branch - 查看远端所有分支