Java知识点总结(一)---int与Integer的区别

本文详细解析Java中Integer与int的区别,重点解释了Integer的初始值、缓存机制以及Integer与int进行比较时的特殊处理方式。

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

当大家被问及int与Integer的区别时,相信大家都能答出两个来:

  1. Integer是int的包装类

  2. Integer的初始值是null,而int的初始值是0;

但如果有下面一个问题:Integer i1 = new Integer(1); int i2 = 1 ;i1 == i2 吗?肯定有相当一部分人是答不出来的,下面我就来总结一下:

假如有下面的程序:

public class TestInteger {

    public static void main(String[] args) {

        int i1 = 128;
        Integer i2 = 128;
        Integer i3 = new Integer(128);
        System.out.println(i1 == i2);//true
        System.out.println(i1 == i3);//true

        Integer i4 = 127;
        Integer i5 = 127;
        System.out.println(i4 == i5);//true

        Integer i6 = 127;
        Integer i7 = new Integer(127);
        System.out.println(i6 == i7);//false

        Integer i8 = 128;
        Integer i9 = 128;
        System.out.println(i8 == i9);//false

        Integer i10 = new Integer(127);
        Integer i11 = new Integer(127);
        System.out.println(i10 == i11);//false

    }
}

解释一下:

  • 为什么第八行跟第九行都是true?因为int类型的数据跟Integer比较的话,Integer不管是new还是不new,Integer都会用到java的拆箱(jdk1.5以上)转换成int类型的数据再与所给的int类型的数据进行比较,所以是true

  • 为什么第13行是true,而第21行是false?这是因为,java在编译Integer i = 127的时候,被翻译成 Integer i5 = Integer.valueOf(127);,这样我们就得去看一下valueOf(int i)这个方法了:

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

你会发现对于-128到127之间的数,会进行缓存,Integer i4 = 127时,会将127进行缓存,下次再写Integer i5 = 127时,就会直接从缓存中取,就不会new了。i4跟i5所指向的同一个对象,而i6跟i7所指向的两个对象,所以13行的结果为true,而21行为false。

  • 第17跟25行就不解释了,他们指向的是不同的对象,所以都为false;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值