iload
Java 操作码用于将值从局部变量数组 (LVA) 压入操作数堆栈。
此操作码采用单个字节作为参数 ( en.wikipedia.org/wiki/Java_bytecode_instruction_listings ),用作 LVA 的索引。
如果 LVA 的一个元素始终是对象的引用(我想这不是静态方法的情况,但现在让我们忽略它们),并且如果恰好一个字节用作索引(可能有 256 个)值),那么一个方法如何访问超过 255 个不同的局部变量?
最佳答案
是的,Java 方法可以有超过 255 个局部变量。 wide
操作码指令可用于修改 iload
或 aload
指令以使用 16 位索引而不是 8 位索引,这意味着您可以在一个函数中拥有多达 65536 个不同的局部变量,只要 wide
操作码最终被使用。
也就是说,请注意 Java 局部变量不一定与 JVM 局部变量一一对应。 Java 编译器可能会查看您的代码,注意到局部变量的空间可以在某些上下文中重复使用,然后将多个 Java 局部变量映射到相同的 JVM 局部变量。
希望这对您有所帮助!
关于java - Java 方法可以有超过 255 个局部变量吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14026053/