Integer内部知多少

相信大家都会有遇到过这样的面试或者笔试题 如下:

知道上面几种情况的输出结果是什么吗?

对于不清楚的情况,或者对该结果又疑问,可以自己通过代码进行测试,当然这也是我今天需要讲到的内容

或许大家心里有疑问,同样的赋值,为什么比较得出的结果却不一样,这里得从Integer的源码讲起。

学过java的同学都知道,使用==和equals比较的不同,前者比较的是引用,而后者比较的是值(内容)。这里同时涉及到自动装箱的问题。自动装箱、拆箱这里就不在详讲,不懂的可以自行百度。

在进行自动装箱的过程中,根据源码可以知道该步骤是调用了valueOf方法,源码如下:


然后我们在看下IntegerCache


从上面的两幅截图可以看出:首先说下下面这幅,意思就是说Integer会自带一个数据缓存,缓存的数据的范围的[-128,127],在初始化的时候,这些数据就已经放入到缓存中了

然后我们再来解释下第一幅图片,就是说如果传入的数据在缓存的范围内,那么就直接从缓存中去拿,如果传入的数据不在缓存范围内,就需要重新实例化一个Integer对象,这也就解释了为什么同样的定义,比较的结果却是不同。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值