Java之Integer数值比较

来源:互联网 发布:网络设计招聘信息 编辑:程序博客网 时间:2024/05/29 19:29

工作中偶然遇到下面的问题,mark以下

Integer数值比较。下面展示测试代码。

    public static void main(String[]args){        testInteger();    }    public static void testInteger() {          Integer c = 127;          Integer d = 127;          assertOut("=--------------------------整形127--------------------------------");        assertOut(c == d);  //true        Integer e = 128;          Integer f = 128;          assertOut("=--------------------------整形128--------------------------------");        assertOut(e == f);  //false    }  

为何Integer对象等于127便相等,而等于128则不等

Integer c = 127 ; 等价于 Integer c = Integer.valueOf(127);
Integer b = 128 ; 等价于 Integer b = Integer.valueOf(128);

Java的Integer使用过程中存在缓存,请看下面Java代码

    int low = -128;    int high = 127;    Integer [] cache = new Integer[(high - low) + 1];    int j = low;    for(int k = 0; k < cache.length; k++)        cache[k] = new Integer(j++);    public static Integer valueOf(int i) {        if (i >= IntegerCache.low && i <= IntegerCache.high)            return IntegerCache.cache[i + (-IntegerCache.low)];        return new Integer(i);    }

Integer的缓存范围为:-128~127,当数值不再这个范围内的时候便会 创建新的Integer对象而不同对象之间的直接是不想等的(两个对象的物理地址不同)。