1. 程式人生 > >Java之Integer數值比較

Java之Integer數值比較

工作中偶然遇到下面的問題,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物件而不同物件之間的直接是不想等的(兩個物件的實體地址不同)。