Integer和int之间的几个问题

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

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

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

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

  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类对象。

猜你喜欢

转载自www.cnblogs.com/crush-u-1214/p/11397101.html