Integer 數值比較
阿新 • • 發佈:2017-09-04
str ont eof integer ring align 空間 ace bug
Integer a = 50;
Integer b = 50;
System.out.println("a==b:------------>"+(a==b));//true
Integer c = 128;
Integer d = 128;
System.out.println("c==d:------------>"+( c==d));//false
Integer e = 128;
Integer f= 128;
System.out.println("e==f:------------>"+( c.intValue()==d.intValue()));//true
}
//Integer 源碼
private
static
class
IntegerCache {
static
final
int
low = -
128
;
static
final
int
high;
static
final
Integer cache[];
public
static
Integer valueOf(
int
i) {
assert
IntegerCache.high >=
127
;
if
(i >= IntegerCache.low && i <= IntegerCache.high)
return
IntegerCache.cache[i + (-IntegerCache.low)];
return
new
Integer(i);
}
java中Integer類型對於-128-127之間的數是緩沖區取的,所以用等號比較是一致的。但對於不在這區間的數字是在堆中new出來的。所以地址空間不一樣,也就不相等。
//我所犯的錯誤 將兩個Integer類型用 == 進行比較 當超出-128 ---127就會返回false 測出bug 改善:運用 intValue()方法進行比較 public static void main(String[] args) {Integer a = 50;
Integer b = 50;
System.out.println("a==b:------------>"+(a==b));//true
Integer c = 128;
Integer d = 128;
System.out.println("c==d:------------>"+( c==d));//false
Integer e = 128;
Integer f= 128;
System.out.println("e==f:------------>"+( c.intValue()==d.intValue()));//true
}
Integer 數值比較