鉴于指令istore_<n>
及其文档:
n 必须是当前帧的局部变量数组的索引(第 2.6 节)。
它没有指定它从哪个索引开始。我假设为 0。对于给定的 istore 操作,它应该增加 1。
给定一个简单的类:
public class TestingStuff {
public static void main(String[] args) {
int a = 11;
int b = 12;
}
public static void test() {
int c = 13;
int d = 14;
}
}
我希望这两种方法有不同的框架。a那么这应该意味着存储和的指令b将是istore_0和istore_1。c以及用于存储和 的相同索引d。但由于某种原因,main方法中的索引从 开始1。这似乎总是如此。但我找不到任何有关原因的信息。
javap 的输出:
public static void main(java.lang.String[]);
descriptor: ([Ljava/lang/String;)V
flags: ACC_PUBLIC, ACC_STATIC
Code:
stack=1, locals=3, args_size=1
0: bipush 11
2: istore_1
3: bipush 12
5: istore_2
6: return
public static void test();
descriptor: ()V
flags: ACC_PUBLIC, ACC_STATIC
Code:
stack=1, locals=2, args_size=0
0: bipush 13
2: istore_0
3: bipush 14
5: istore_1
6: return
是这样吗?如果是这样,为什么?
慕少森
相关分类