有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

字节码源代码与字节码中本地变量之间的Java双射映射

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

例如

源代码:

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

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

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

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


共 (2) 个答案

  1. # 1 楼答案

    不,因为编译器可以优化代码,因此可以消除变量。简单想想这样一段代码:

    int a = 1; // only used to initialize b
    int b = a;
    

    那么就没有必要为a保留空间。或者,以你为例

    int x = 42; // only used to initialize a
    A a = new A(x);
    
  2. # 2 楼答案

    Is there a bijective mapping between the local variables in the source code of a Java method and the byte code?

    一般来说没有,因为作用域外变量使用的地址会被其他作用域内变量重用。例如:

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

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