//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 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
}