字节码练习
▼java复制代码public static void main(String[] agrs){ int x = 10; x = x++ + ++x + (x++) + (++x * 10); System.out.println(x); }
对应的字节码指令为:
▼java复制代码0 bipush 10 2 istore_1 3 iload_1 4 iinc 1 by 1 7 iinc 1 by 1 10 iload_1 11 iadd 12 iload_1 13 iinc 1 by 1 16 iadd 17 iinc 1 by 1 20 iload_1 21 bipush 10 23 imul 24 iadd 25 istore_1 26 getstatic #2 <java/lang/System.out : Ljava/io/PrintStream;> 29 iload_1 30 invokevirtual #3 <java/io/PrintStream.println : (I)V> 33 return
0)将10压入操作数栈
2)将操作数栈第一位 压入局部变量表
3)将局部变量表第一位 压入 操作数栈 此时完成 x 的初始化(操作数栈【10】局部变量表【10】)
4)将局部变量表第一位 自增加1(操作数栈【10】局部变量表【11】)
7)将局部变量表第一位 自增加1(操作数栈【10】局部变量表【12】)
10)将局部变量表第一位 压入 操作数栈 (操作数栈【12,10】,局部变量表【12】)
11)将操作数栈第一位 和 操作数栈第二位相加(操作数栈【22】,局部变量表【12】)
12)将局部变量表第一位 压入 操作数栈(操作数栈【12,22】,局部变量表【12】)
13)将局部变量表第一位自增加1(操作数栈【12,22】,局部变量表【13】)
16)将操作数栈第一位 和 操作数栈第二位 相加(操作数栈【34】,局部变量表【13】)
17)将局部变量表第一位自增加1(操作数栈【34】,局部变量表【14】)
20)将局部变量表第一位 压入 操作数栈(操作数栈【14,34】,局部变量表【14】)
21)将10压入操作数栈(操作数栈【10,14,34】,局部变量表【14】)
23)将操作数栈第一位和第二位相乘(操作数栈【140,34】,局部变量表【14】)
24)将操作数栈第二位和第三位相加(操作数栈【174】,局部变量表【14】)
25)将操作数栈第一位压入局部变量表(操作数栈【】,局部变量表【174】)
26)调用System静态方法
29)将局部变量表第一位弹出
30)输出174
评论
问答助学
相关内容
0个评论
全部评论
点击登录,快来和大家讨论吧~
表情
图片
暂无评论
