诸如局部变量是否“最终”存储在 Java 字节码中的信息在哪里?我知道对于字段(全局变量)和方法,这些可以在访问标志位中找到,但似乎无法在局部变量表中找到等效项。
我对这个问题很感兴趣,因为我正在使用 BCEL 检查局部变量是否为最终变量,并在 AccessFlags 类中找到了字段、方法和类的等价物。
提前致谢。
局部变量的最终确定性由编译器检查,不会进入字节码。此信息在运行时不需要,因此不存储在字节码中。
JVM 以相同的方式处理最终和非最终局部变量。
简短的回答 - 你不能。局部变量的“最终”访问标志仅告诉编译器不能重新分配变量值。请参阅JVM 规范的第 4.7.13 节。
我不相信您可以确定final
局部变量的性;这可以通过编写一个带和不带final
关键字的小方法并比较字节码来证明。