Integer數值小於127時使用==比較的坑

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方法。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章