java中的常量池

在java中,JVM会为String类和几个基本数据类型(Integer、Byte、Short、Character、Boolean)的包装类创建常量池,常量池会事先创建多个对象存储在池中,如果你想要创建的对象符合条件,会直接从常量池中获取,而不是在堆中开辟一片新的对象空间。(java虚拟机缓存了Integer、Byte、Short、Character、Boolean包装类在-128~127之间的值,如果取值在这个范围内,会从常量池取出对象,超出这个范围就会重新在堆中创建一个对象)


例:在Integer类的内部有一个IntegerCache的内部类,这个就是Integer常量池实现的有关类。 在该类的内部有三个字段,分别是low,high 用于限定常量池的存储范围。还有一个Integer cache[] 数组,用于存储缓存的常量。low的设值被初始化为-128,这是在代码中写死的一个最低值。最高值的获取,所需会利用jdk里面的一个内部类去调用虚拟机的一个参数(也就是所Integer缓存池的最高范围并不是127,而是要看有没通过一个虚拟机进行设值)。
即在没有设置JVM的参数时,如果创建的Integer对象值在-128~127之间,会直接从常量池中获取 。

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值