Java方法的源代码中的局部变量与字节码之间是否存在双射映射?

例如。

源代码:

int x = ...
A a = ....
if (...) {
    B b = ....
}


我可以假设在字节码中将有3个局部变量的空间,其中第一个与x有关,第二个与a有关,第三个与b有关?

字节码中的本地变量的顺序是否与它们在Java源代码中首次使用的顺序有关?

编辑:我知道,对于longs和doubles,Java使用两个局部变量,并且为方法参数保留了局部变量。

最佳答案

Java方法的源代码中的局部变量与字节码之间是否存在双射映射?


通常没有,因为超出范围的变量使用的地址被其他范围内的变量重用。例如:

for (int j = 0;;) {}
int k  = 0;


k可以重复使用与j相同的位置。

09-11 18:38