Integer1000为什么不等一Integer1000

117 阅读1分钟

Integer1000为什么不等一Integer1000

package com.helloworld.beforeNewJob;
​
public class test {
    public static void main(String[] args) {
        int a=100;
        int b=100;
        int c=1000;
        int d=1000;
        Integer integer1=new Integer(100);
        Integer integer2=new Integer(100);
        Integer integer3=new Integer(1000);
        Integer integer4=new Integer(1000);
        Integer integer5=100;
        Integer integer6=100;
        Integer integer7=1000;
        Integer integer8=1000;
        System.out.println(a==b);
        System.out.println(c==d);
        System.out.println(integer1==integer2);
        System.out.println(integer3==integer4);
        System.out.println(integer5==integer6);
        System.out.println(integer7==integer8);
    }
}

结果

true
true
false
false
true
false

解释

Integer 对象除了可以通过new来创建,也可以直接将int值赋值给Integer变量,这是因为系统会自动根据将这个int值封装成一个Integer对象,比如:Integer a=100;实际操作是:Integer a=Integer.valueof(100);
这里有一个需要注意的地方:在上面Integer的valueOf()方法里面,当int值范围在-128127之间时,会通过一个IntegerCache缓存来创建Integer对象;两个Integer变量引用是IntegerCache中的同一个对象,比较的内存地址相同。
当int值不在以上范围时,两个Integer对象都是通过new创建的,比较的内存地址不同。

\