java自动装箱之Integer

来源:互联网 发布:网络废旧电子产品回收 编辑:程序博客网 时间:2024/05/19 13:58

Integer inta = 2;     //相当于Integer inta = new Integer(2);

Integer intb = 2;     //相当于Integer inta = new Integer(2);

System.out.println(inta == intb);//输出将为true

 

Integer biga = 128;     //相当于Integer inta = new Integer(128);

Integer bigb = 128;     //相当于Integer inta = new Integer(128);

System.out.println(biga == bigb);//输出将为false;

 

出现这种结果差别的原因主要是Integer这个类的设计导致的,如java.lang.Integer类的如下源码所示;

static final Integer[] cache = new Integer[-(-128) + 127 + 1];

static {

    for (int i=0; i<cache.length; i++)

        cache[i] = new Integer[i-128]; 

}

从上面看来,Integer中将-128到127的Integer对象缓存到了cache数组中;

inta == intb判断时这两个Integer对象实际上都是指向Integer里cache数组中的同一个对象(cache[130]),因此结果为true;

biga == bigb时由于128不再Integer的缓存数组中,因此每次都会重新创建一个新的对象,因而分别指向不同对象的biga和bigb不相等,返回false

0 0