注意:对于大部分与数据相关的字节码指令
i
代表对int
类型的数据操作
l
代表long
类型的数据操作
s
代表short
类型的数据操作
b
代表byte
类型的数据操作
c
代表char
类型的数据操作
f
代表float
类型的数据操作
d
代表double
类型的数据操作
a
代表reference
(引用)类型的数据操作
1.加载和存储指令
加载和存储指令用于将数据从栈帧的局部变量表和操作数栈之间来回传递
- 将本地变量加载到操作数栈的指令(局部变量表->操作数栈):
1.iload,lload,fload,dload,aload
后面跟着一个局部变量表的索引值
如iload 1
,即表示将局部变量表中索引为1的数据加载到操作数栈中
2.iload_<n>、lload_<n>、fload_<n>、dload_<n>、aload_<n>
其中<n>
表示局部变量表中的索引(n的取值为0,1,2,3)
如:iload_1:
即和iload 1
相同
注意:操作byte、char和short
类型数据时,用int类型的指令来表示 - 将数值从操作数栈存储到局部变量表中(操作数栈->局部变量表)
1.istore、lstrore、fstore、dstore、astore
:后面跟着一个局部变量表的索引值,表示将操作数栈栈顶的数据存入到指定的索引的位置
如:istore 1
,表示将操作数栈栈顶数据存储到局部变量表索引为1的位置
2.istore_<n>、lstore_<n>、fstore_<n>、dstore_<n>、astore_<n>
其中<n>
表示局部变量表中的索引(n的取值为0,1,2,3)
如:istore_1
,即和istore 1
相同 - 加载一个常量到操作数栈中
bipush | 将-128~127的数值常量从常量池加载至栈顶(包括-128和127,不包括0,1,2,3,4,5,它们可以通过指令iconst_0指令加载) |
sipush | 将-32768~32767的数值常量,即short类型的数值常量加载至栈顶(不包括-128~127) |
ldc | 将int、float或String类型的常量从常量池中加载至栈顶 |
ldc_w | 将int、float或String类型的常量从常量池中加载至栈顶(宽索引) |
ldc2_w | 将long或者double类型常量值从常量池中加载至栈顶(宽索引) |
aconst_null | 将null加载至栈顶 |
iconst_m1 | 将int类型-1加载至栈顶 |
iconst_<i> | 将int类型<i>加载至栈顶,即iconst_0,表示加载int类型的0到栈顶(i=0,1,2,3,4,5) |
lconst_<l> | 将long类型<l>加载至栈顶,即lconst_0,表示加载long类型的0到栈顶(i=0,1) |
fconst_<f> | 将float类型<f>加载至栈顶,即fconst_0,表示加载float类型的0到栈顶(i=0,1,2) |
dconst_<d> | 将double类型<d>加载至栈顶,即dconst_0,表示加载double类型的0到栈顶(i=0,1) |