我可以在 JVM 文档中阅读以下内容:
所有 8 字节常量在类文件的 constant_pool 表中占据两个条目。如果 CONSTANT_Long_info 或 CONSTANT_Double_info 结构是索引 n 处的 constant_pool 表中的项,则池中的下一个可用项位于索引 n+2 处。constant_pool 索引 n+1 必须有效但被视为不可用。
回想起来,让 8 字节常量占用两个常量池条目是一个糟糕的选择。
如果索引 n+1 有效,它怎么会“不可用”呢?此外,它似乎并非完全不可用,因为可以将值存储到其中:
long 或 double 类型的值占用两个连续的局部变量。这样的值只能使用较小的索引来解决。例如,存储在索引 n 处的局部变量数组中的 double 类型的值实际上占用了索引为 n 和 n+1 的局部变量;但是,不能从中加载索引 n+1 处的局部变量。可以存入。但是,这样做会使局部变量 n 的内容无效。
这是否意味着“有效”=“您可以存储到其中”和“不可用”=“您无法加载”?