Java中的Integer类:Integer常量池、一些特殊情况下的比较、拆箱与装箱

目录

1.Integer常量池:

2.一些特殊情况下的比较:

3.拆箱与装箱


1.Integer常量池:

        在Integer类中,如果创建的对象的值-128 <= x <= 127,那么就会返回指向 IntegerCache.cache 中已经存在的对象的引用,否则就会重新创建一个Integer对象。

源码:

    public static Integer valueOf(int i) {
        if (i >= IntegerCache.low && i <= IntegerCache.high)
            return IntegerCache.cache[i + (-IntegerCache.low)];
        return new Integer(i);
    }

其中的IntegerCache.low就是-128

IntegerCache.low就是127

        那么以下代码的输出结果就很好理解了:

Integer a = 100;
Integer b = 100;
System.out.println(a == b);//true

        即使a和b都是引用变量,但由于a和b的值在-128与127之间,那么它们返回的对象就会是常量池里已经存在的对象引用,所以这两个返回的引用对象是同一个(常量池里的100)。       

        但是如果超出了这个常量池的范围,那么不相等了: 

        Integer a = 128;
        Integer b = 128;
        System.out.println(a == b);//false

2.一些特殊情况下的比较:

1.一个new出来的对象和一个常量池里的对象相比,由于new出来的对象的引用指向堆中的新建的对象,而不是new出来的对象指向常量池里的对象,所以它们并不相同。

        Integer a = new Integer(100);
        Integer b = 100;
        System.out.println(a == b);//false

就算它们的值都超过了常量池的值的范围,那么也不会相同:

        Integer a = new Integer(1001);
        Integer b = 1001;
        System.out.println(a == b);//false

2.两个new出来的对象相比,由于a和b都创建了一个新的引用对象,那么用这两个对象的引用进行比较自然是不相等的(即使它们的值是在常量池范围内的)。

        Integer a = new Integer(100);
        Integer b = new Integer(100);
        System.out.println(a == b);//false

3.Integer类和int值相比较,因为包装类Integer和基本数据类型int比较时,Java会自动拆箱为int,然后进行比较,实际上就变为两个int变量的比较。

        Integer a = new Integer(100);
        int b = 100;
        System.out.println(a == b);//true

3.拆箱与装箱

        装箱就是将基本数据类型转化为包装类型,那么拆箱就是将包装类型转化为基本数据类型。

以Integer和int为例:

将int类转化为Integer就称为装箱:

        Integer a = 128;
        int b;
        b = a;

 

将Integer类转化为int就称为拆箱:

 

        Integer a;
        int b = 128;
        a = b;

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值