java-基础 Integer和Int的比较分析

本文探讨了Java中Integer与int的区别,包括它们的初始值、自动拆箱特性,以及在不同情况下的比较。重点分析了当Integer值在-128到127之间时的缓存行为,解释了为何在这个范围内使用`==`比较时可能返回true,而超出范围则返回false。此外,还介绍了如何正确比较两个Integer对象的值。
摘要由CSDN通过智能技术生成

java-基础 Integer和Int的比较分析

第一: Ingeter是int的包装类,int的初值为0,Ingeter的初值为null

第二:需要明确的一点是,包装型(Integer)和基本型(int)比较会自动拆箱(jdk1.5以上)。

看代码

                Integer a1 = 128;
		Integer a2 = 128;
		int a11 = 128;
		
		System.out.println(a1 == a2); //false
		//Integer会自动拆箱为int,所以为true
		System.out.println(a1 == a11); //true
		System.out.println(a1.equals(a11)); //true
		
		System.out.println("----------------");
		
		Integer a5 = new Integer(6);
		Integer a6 = new Integer(6);
		
		System.out.println(a5 == a6); //false
		System.out.println(a5.equals(a6)); //true

 

在这里很多人比较容易迷惑的是如下情况:

                Integer a1 = 6;
		Integer a2 = 6;
		System.out.println(a1 == a2); //true
		
		Integer a3 = 128;
		Integer a4 = 128;
		System.out.println(a3 == a4); //false

如果研究过jdk源码,你就会发现Integer a3 = 128;在java编译时会被翻译成 Integer a3 = Integer.valueOf(128);

我们再来看看valueOf()的源码就更清晰了。

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 a1 = 6时,会将6进行缓存,下次再写Integer a2 = 6;时,就会直接从缓存中取,也就不用new一个对象了,所以a1和a2比较时就为true。但a3和a4是超过范围,会new一个对象,==是进行地址和值比较,是比较两个对象在JVM中的地址,这时a3和a4虽然值相同但地址是不一样的,所以比较就为false了。

通过上面的分析可知:

          1.两个都不是new出来的Integer,且数值在-128~127之间,用==比较时,基本值相等时为true,否则为false;
          2.两个都是new出来的Integer,为false
          3.int和Integer比较,数值相同,用==比较时为true。(因为Integer会自动拆箱为int去比较)

  • 所有包装类对象之间值的比较,建议使用equals方法比较

如果要比较两个Integer对象的值(均为new的对象),可以通过.intValue()进行转换后来比较,如下:

                Integer a1 = 128;
		Integer a2 = 128;
		System.out.println(a1.intValue() == a2.intValue());

也可以使用equal()来进行比较,如下:

        Integer a1 = 128;
		Integer a2 = 128;
		System.out.println(a1.equals(a2)); //true

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值