if底层指令图解分析
2024-06-16 本文已影响0人
zzz_0427
public class IFTest{
public static void main(String[] args) {
int a = 1;
if (a == 1) {
a = 1314;
} else {
a = 520;
}
}
}
public static void main(java.lang.String[]);
descriptor: ([Ljava/lang/String;)V
flags: (0x0009) ACC_PUBLIC, ACC_STATIC
Code:
stack=1, locals=2, args_size=1
0: iconst_0
1: istore_1
2: iload_1
3: ifne 13
6: sipush 1314
9: istore_1
10: goto 17
13: sipush 520
16: istore_1
17: return
1、iconst_0指令,把0存入操作数据栈
![](https://img.haomeiwen.com/i12792403/7059ef077de35806.png)
2、istore_1指令,把0从操作数据栈保存到局部变量表1号槽位中
![](https://img.haomeiwen.com/i12792403/f1dac41332e9d201.png)
3、iload_1指令,把局部变量表1号槽位加载到操作数据栈中
![](https://img.haomeiwen.com/i12792403/2af6b2624b7c834e.png)
4、ifne 13指令,判断是否不相等,不相等跳转到13行指令,相等则继续往下执行
4、sipush 1314指令,把1314压入操作数据栈
![](https://img.haomeiwen.com/i12792403/c316892ca60105ee.png)
5、istore_1指令,把栈顶1314保存到局部变量表一号槽位
![](https://img.haomeiwen.com/i12792403/ab6cf055f9b4852c.png)