Java在處理Integer時使用了一個緩存,其中緩存了-128到127之間的數字對應的Integer對象,所以在絕大多數情況下,當我們把2個小於128的Integer對象用==比較時,Java往往是用緩存中的對象進行的比較,得到的結果也往往是true,比如這樣:
public class Test {
public static void main(String[] args){
Integer a=1;
Integer b=1;
Integer c=Integer.valueOf(1);
Integer d=Integer.valueOf("1");
System.out.println(a==b);
System.out.println(a==c);
System.out.println(a==d);
}
}
輸出的結果全是true。
如果用debug模式就會發現,這幾個對象的id都是一樣的,因爲他們都是從緩存中獲取的同一個對象。
下面坑來了:
Integer f=new Integer(1);
人工new一個Integer對象,此時這個對象就不是從緩存中獲取的了,此時再用==比較的話,返回的就是false,比如這樣:
public class Test {
public static void main(String[] args){
Integer a=1;
Integer e=new Integer("1");
Integer f=new Integer(1);
System.out.println(a==e);
System.out.println(a==f);
}
}
輸出的都是false。
結論:
1,儘量不要用new的形式來獲得Integer對象。
2,Integer對象比較大小時,不要用==,儘量使用equals方法。