Java之Integer數值比較
阿新 • • 發佈:2019-02-18
工作中偶然遇到下面的問題,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物件而不同物件之間的直接是不想等的(兩個物件的實體地址不同)。