如何判断局部变量是否是“final”?来自 Java 字节码? (与BCEL相关)

发布于 2024-12-09 01:41:57 字数 186 浏览 0 评论 0原文

Java 字节码中诸如局部变量是否为“final”之类的信息存储在哪里?我知道对于字段(全局变量)和方法,这些可以在访问标志位中找到,但似乎无法在局部变量表中找到等效项。

我对这个问题很感兴趣,因为我正在使用 BCEL 来检查局部变量是否是最终变量,并且在 AccessFlags 类中找到了等效的字段、方法和类。

提前致谢。

Where is information such as if a local variable is "final" stored in Java bytecode? I know that for fields (global variables) and methods these are found in the access flag bits, but cannot seem to find the equivalent in the local variable table.

I am interested in this question as I am using BCEL to check if a local variable is final, and have found the equivalent for fields, methods and classes in the class AccessFlags.

Thanks in advance.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

情定在深秋 2024-12-16 01:41:57

局部变量的最终性由编译器检查,并且不会进入字节码。运行时不需要此信息,因此不会存储在字节码中。

JVM 以相同的方式处理最终和非最终局部变量。

The finality of local variables is checked by the compiler and doesn't make it to the bytecode. This information isn't required at runtime, and hence isn't stored in the bytecode.

The JVM treats final and non-final local variables in the same way.

南…巷孤猫 2024-12-16 01:41:57

简短的回答 - 你不能。局部变量的“最终”访问标志仅告诉编译器不能重新分配变量值。请参阅JVM 规范的第 4.7.13 节。

Short answer - you can't. The 'final' access flag for local variables only tells compiler that variable value can't be reassigned. See section 4.7.13 of the JVM specification.

只等公子 2024-12-16 01:41:57

我不相信你可以确定局部变量的最终性;这可以通过编写一个带有和不带有 final 关键字的小方法并比较字节码来证明。

I don't believe you can determine the finality of a local variable; this can be proven by writing a small method with and without the final keyword and comparing the bytecode.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文