Integer包装类中值的比较

前提知识:“==”当比较基本类型时比较的是值,当为引用类型时比较的是内存地址

首先看代码和结果:

Integer integer1 = new Integer(1);
Integer integer2 = new Integer(1);
System.out.println("integer1 == integer2 :"+ (integer1 == integer2));

Integer integer3 = Integer.valueOf(1);
Integer integer4 = Integer.valueOf(1);
System.out.println("integer3 == integer4 :"+ (integer3 == integer4));

Integer integer5 = Integer.valueOf(128);
Integer integer6 = Integer.valueOf(128);
System.out.println("integer5 == integer6 :"+ (integer5 == integer6));

控制台输出:
image


解释:
第一个:因为new了嘛,所以就重新开辟了堆空间并且指向了不同的地址这里没啥说的

第二个和第三个这里就需要看源码了:

valueOf(int i)源码如下:

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

不用看太多,首先在if语句中先进行比较,当大于等于某个值和小于等于某个值的时候返回,否则在new一下(这里new一下当然就会有不同的指向),那么问题来了,这“两个值”是多少继续看源码:

/**
This method will always cache values in the range -128 to 127,
*/

就找到了这句话,综上可以理解为,当值-128 to 127时,不用创建爱你新的空间不用new当使用 “ == ”进行比较的时候同一个地址,所以true;
反之没在这个范围内就会创建新的空间并且有不同的指向,所以当用“==”比较时为false;


练习测试:

//示例一
        Integer i1 = new Integer(127);
        Integer i2 = new Integer(127);
        System.out.println(i1 == i2);//F

//示例二
        Integer i3 = new Integer(128);
        Integer i4 = new Integer(128);
        System.out.println(i3 == i4);//F

//示例三
        Integer i5 = 127;//底层 Integer.valueOf(127)
        Integer i6 = 127;//-128~127
        System.out.println(i5 == i6); //T

//示例四
        Integer i7 = 128;
        Integer i8 = 128;
        System.out.println(i7 == i8);//F

//示例五
        Integer i9 = 127; //Integer.valueOf(127)
        Integer i10 = new Integer(127);
        System.out.println(i9 == i10);//F

//示例六
        //只有有基本数据类型,判断的是值是否相同
        Integer i11=127;
        int i12=127;
        System.out.println(i11==i12); //T

//示例七
        //只有有基本数据类型,判断的是值是否相同
        Integer i13=128;
        int i14=128;
        System.out.println(i13==i14);//T

结语:兄弟们加油哇!!

posted @ 2022-04-30 17:00  yfs1024  阅读(88)  评论(0)    收藏  举报