Integer缓存机制

本文探讨了Java中Integer的缓存机制,指出Integer对象在-128到127之间的值会被缓存,避免重复初始化。此外,还介绍了自动拆箱和装箱的概念,它们分别是将引用数据类型转换为基本数据类型和将基本数据类型转化为对象的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

缓存机制:缓存了从 -128 到 127 内的所有 Long 值,如果是这个范围内的 Long 值,就不会初始化,而是从缓存中拿。
源码如下

private static class LongCache {
        private LongCache(){}
        //数组存储值
        static final Long cache[] = new Long[-(-128) + 127 + 1];
        //将-128~127值存储到cache中
        static {
            for(int i = 0; i < cache.length; i++)
                cache[i] = new Long(i - 128);
        }
    }
//结论:new出来的对象肯定是不相等的,
//不是new(看范围:如果在指定范围则相等,如果不在指定范围不相等)

Integer a=new integer(1);
Integer b=new integer(1);
System.out.println(a==b);//false 两个对象地址不相等

Integer c=1;
Integer d=1;
System.out.println(c==d);
//true 如果没有超出缓存范围,你可以将它理解为两个值,所有他们相等,
//如果他们超过缓存范围,如下面的例子,Integer e=130->
//Integer e= new Integer(130) e属于一个对象,f超出范围,
//所有f属于另一个对象。所以e!=f

Integer e=130;
Integer f=130;
System.out.println(e==f);

扩充自动拆箱和自动装箱

  • 自动拆箱:将引用数据类型转换为基本数据类型
  • 自动装箱:将基本数据类型装换为引用数据类型(对象)

理解代码如下

Integer a=1;//这就是自动装箱:Integer a=new integer(1);(但他并没有new:我现在的理解认知)

int b=a-1;//虽然a在上面时对象,但是由于自动拆箱,对象a将会变为基本数据值(1),
System.out.println(a);//1
System.out.println(b);//0
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值