浅谈byte型常量池

浅谈byte型常量池

二话不说,先来看三个代码

Integer i1 = 127 ;
Integer i2 = 127 ;

println(i1 = i2);
true
Integer i1 = 128 ;
Integer i2 = 128 ;

println(i1 = i2);
false
Integer i1 = -1;
Integer i2 = -1 ;

println(i1 = i2);
true

那么问题来了
为什么最终结果会是这样呢?

相信大部分人会回答
因为在Java底层中会将常用的值放入常量池中,方便取出,而这个值就是byte型数值的范围

这里有个高大上的词 常量池

那么第二问题来了
如果查看这个常量池呢 ? 我们有什么依据可以看到这个常量池呢 ?

让我们先对上述代码进行字节码
在这里插入图片描述
我们会发现integer在字节码汇中的实现就是用integer.valueof

那么让我们带着这个原理看看Java底层是如何实现的

public static Integer valueOf(int var0){
    return var0 >= -128 && var0 <= Inteer.IntegerCache.high ? Integer.IntegerCache.cache[var0 + 128] : new Integer(var0);
}

底层中已经告诉我们,只要范围在byte范围中,就会去缓存中获取数据.

所以其实在byte范围值并不是在常量池中,而是事先放入了缓存中,方便拿取

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值