Integer的IntegerCache缓存

首先我们来看一道面试题

 Integer a = Integer.valueOf(1);
 Integer b = Integer.valueOf(1);
 Integer c = Integer.valueOf(128);
 Integer d = Integer.valueOf(128);
 System.out.println(a==b);
 System.out.println(c==d);

此处给予思考时间,我们带着问题先来看看Integer的IntegerCache缓存。

IntegerCache

  • IntegerCache是Integer类中的一个私有静态内部类
    在这里插入图片描述
    • 如图,其有一个属性是一个数组cache[],通过源码可以知道其最小值为low设定好的-128,而最大值在默认情况下则是high默认的127
  • 通过源码可以知道cache[]数组里预先存放有-128到127的整型数值
  • 当我们使用Integer.valueOf(int)方法时,有以下两种情况在这里插入图片描述
    • 1.当int∈[-128,127],此时会直接从cache数组中取出该值在这里插入图片描述

    • 2.当int∉[-128,127],此时会new一个Integer对象在这里插入图片描述

回看题目

  • 可以知道在这里插入图片描述
    • 当为1时,a,b实际上指向的是cache[]中的同一个1,两个引用指向同一个数
    • 而当为128时,超过了cache[]的存储值得范围,重新new了一个实例对象,因此,cd都是不同对象
  • 补充
Integer a = 1;
Integer a = Integer.valueOf(1);

以上两句是等效的,此处自动装箱了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值