字节码练习

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个评论
点击登录,快来和大家讨论吧~
表情
图片
暂无评论
下载 APP