一、Integer equals()方法判斷的是兩個Integer對象值是否相等
public boolean equals(Object obj) {
if (obj instanceof Integer) {
return value == ((Integer)obj).intValue();
}
return false;
}
二、Integer==判斷兩個對象的地址是否相等
2.1 兩個通過new Integer()的對象
Integer a= new Integer(200);
Integer b= new Integer(200);
System.out.print(a==b);
輸出false
通過new 一個對象會為對象分配一個地址,不同的new會生成不同的地址
2.2 兩個通過賦值的對象
分下面兩種對象
Integer a= 200;
Integer b= 200;
System.out.print(a==b);
輸出為false
Integer a= 100;
Integer b= 100;
System.out.print(a==b);
輸出為true
通過賦值的生成對象會自動封箱,會經(jīng)過Integer valueOf()方法
public static Integer valueOf(int i) {
if (i >= -128 && i <= 127)
return IntegerCache.cache[i + (-IntegerCache.low)];
return new Integer(i);
}
可以看出在-128-127之間會取緩存池里的緩存對象,同一個值只有一個緩存對象。
所以通過賦值生成的對象會自動封箱
a 如果值為-128-127之間會取同一個地址,兩個對象相等,如果不在之間則會new 一個對象,兩個地址不相同
2.3 一個對象一個基本類型
Integer a= 200;
int b= 200;
System.out.print(a==b);
輸出為true
比較時對象a會自動卸箱,相當于調(diào)用了
public int intValue() {
return value;
}
比較是值