public int getSum(){
int i = 12;
int j = 5;
int k = i + j;
return k;
}
public void testGetSum() {
int i = getSum();
int j = 16;
}
上面兩個(gè)方法對應(yīng)的字節(jié)碼指令
getSum方法
0 bipush 12
2 istore_1
3 iconst_5
4 istore_2
5 iload_1
6 iload_2
7 iadd
8 istore_3
9 iload_3
10 ireturn
testGetSum方法
0 aload_0 //把this從局部變量表中讀取,壓入操作數(shù)棧中
1 invokevirtual #7 <OperatorStackTest.getSum> //利用this調(diào)用getSum方法,返回值保存在棧中
4 istore_1 //將棧中的數(shù)保存到局部變量表中的slot 1
5 bipush 16 //將16壓入操作數(shù)棧
7 istore_2 //從操作數(shù)棧中讀取,存放到局部變量表slot 2的位置
8 return
總結(jié)
push是將操作數(shù)壓入棧中
store是將操作數(shù)從棧中取出,然后存入到局部變量表
load是從局部變量表中將操作數(shù)讀出,放入棧中
add是在棧中做操作數(shù)的相加運(yùn)算,運(yùn)算結(jié)果依然保存在棧中