0

我使用“javap -verbose”解析一个类文件,发现常量池丢失#3,谁能告诉我原因?

在此处输入图像描述 

  

4

2 回答 2

2

请注意,前面的条目具有类型Long其文档说:

所有 8 字节常量都占用文件constant_pool表中的两个条目class。如果 a CONSTANT_Long_infoorCONSTANT_Double_info结构是constant_pool表中索引n处的项目,则池中的下一个可用项目位于索引n +2 处。constant_pool索引n +1 必须有效但被视为不可用。

和整洁的补充

回想起来,让 8 字节常量占用两个常量池条目是一个糟糕的选择。

所以javap决定简单地跳过不可用的条目,而不是打印诸如“<code>#3 unusable”之类的东西……</p>

于 2016-12-16T11:51:12.760 回答
0

Longs 和 Doubles 占用常量池中的两个插槽,因此跳过它们之后的插槽。在这种情况下,插槽 2 持有 Long,因此插槽 3 被跳过。

于 2016-12-16T03:41:31.170 回答