Integer你真的瞭解嗎,快來瞅瞅吧

//首先我們看一下代碼
Integer a1=new Integer(10);
Integer a2=new Integer(10);
Integer a3=10;
int a4=10;
Integer a5=10;


Integer a6=1232;
Integer a7=1232;

System.out.println("a1==a2:"+(a1==a2));//false
分析:a1和a2明顯是兩個對象,對象之間比較;equals或者intValue();進行對比

System.out.println("a2==a3:"+(a2==a3));//false
分析:a2和a3分別是兩個對象,同上

System.out.println("a2==a4:"+(a2==a4));//true
分析:a2是單獨的一個對象,a4是一個數值類型,在發生運算時,a2自動拆箱爲int,
轉換成數值類型,進行對比
補充:
裝箱拆箱是jdk1.5之後的新的特性
Integer a3=10 裝箱  底層執行的是Integer a3=Integer.valueOf(10);
int a4=a3 拆箱 底層執行的是a3.intValue();

System.out.println("a1==a2:"+(a5==a3));//true
分析:
也是對象比較,Integer的取值範圍-128~127
a5和a3的值是在這個區間範圍之內,結果就是true
因爲由IntegerCache.cache(是個Integer類型的數組)中查找
IntegerCache類專門負責Integer緩存的


System.out.println("a1==a2:"+(a6==a7));//false
分析:也是對象比較,超出緩存範圍 new Integer(1232),故false


源碼結論:
    1:i>=128 || i<-128  =====>>new Integer (i)
    2:i<128 && i>=-128  =====>>small_values[i+128]
    
本章節總結:
      1:Integer是int的包裝類,int初始值爲0,Integer 初始值爲null
      2:無論值是否相同,Integer和new Integer(i) 都不相同
      3:兩個都是非new出來的Integer,如果數值在-128~127之間,則爲true
        否則爲false
      4:兩個new出來的,無論值是否相同,引用地址則不通,則爲false
      5:int和Integer比,值相同爲true,否則false,
        無論Integer是new出來的還是
        在-128~127範圍之外的,因爲Integer會自動拆箱爲int在比較

 

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