Integer和int之间的几个问题

1、Integer 类实例变量与 int 类型数据进行 == 比较的时候,如果值是相等的,那么将返回 true;因为在比较的时候,Integer会自动拆箱为int类型。

Integer num1 = new Integer(17);
int num2 = 17;
System.out.print(num1 == num2);    // true

2、new出来的Integer类对象与自动装箱得到的Integer类对象,即便是值一样,在进行==比较时返回的是false;因为自动装箱得到的Integer类对象指向的是Java常量池中的对象,而new出来的Integer类对象指向堆内存中的地址。

复制代码
Integer num1 = new Integer(17);
Integer num2 = 17;
Integer num3 = Integer.valueOf(17);
System.out.print(num1 == num2);    // false
System.out.print(num1 == num3);    // false
System.out.print(num2 == num3);    // true

Integer num4 = 200;
Integer num5 = Integer.valueOf(200);
System.out.print(num4 == num5);    // false
复制代码

3、自动装箱得到的Integer类对象,在值范围为-128—127之间的时候,值相等返回的是true;超出此范围,即使值相等也是false。首先,在编辑时,Integer i = 17会翻译为Integer i = Integer.valueOf(17);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范围内的值,只会在超出缓存范围值时才会new一个新的Integer类对象。

posted @   菜鸟的奋斗之路  阅读(6)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
点击右上角即可分享
微信分享提示