Class文件结构之常量池

 常量池int和float的存储方式如下图所示

 建一个测试类,声明了五个变量,但是取值就两种int类型的10和Float类型的11f

public class IntAndFloatTes{
    private final int a = 10;
    private final int b = 10;
    private float c = 11f;
    private float d = 11f;
    private float e = 11f;
}

然后编译成IntAndFloatTest.class字节码文件,可以通过javap命令进行反解析,javap是jdk自带的反解析工具。它的作用就是根据class字节码文件,反解析出当前类对应的code区(汇编指令)、本地变量表、异常表和代码行偏移量映射表、常量池等等信息。进入到该代码的class文件目录,执行命令,javap -v IntAndFloatTest,结果如下图所示:可以看到虽然我们在代码中写了两次10 和三次11f,但是常量池中,就只有一个常量10 和一个常量11f。

从结果上可以看到常量池第13 个常量池项(cp_info) 就CONSTANT_Integer_info,值为10;第4个常量池项(cp_info) 就是CONSTANT_Float_info,值为11f。代码中所有用到 int 类型 10 的地方,会使用指向常量池的指针值13定位到第13个常量池项(cp_info),即值为10的结构体CONSTANT_Integer_info,而用到float类型的11f时,也会指向常量池的指针值#4来定位到第4个常量池项(cp_info) 即值为11f的结构体CONSTANT_Float_info。如下图所示

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

骆驼整理说

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值