int 與 Integer 主要區別

Java裏的基本類型,不屬於類,要想new必須用封裝類,然後自動轉換(由小到大轉換規則):
Integer a=3; //裝箱 
int i = a; //拆箱,實際上執行了 int t = i.intValue();

在進行運算時,也可以進行拆箱。
Integer i = 10; 
System.out.println(i++);
什麼時候用?
情景1:

//在-128~127 之外的數
 Integer i1 =200;  
 Integer i2 =200;          
 System.out.println("i1==i2: "+(i1==i2));                   
 // 在-128~127 之內的數
 Integer i3 =100;  
 Integer i4 =100;  
 System.out.println("i3==i4: "+(i3==i4));
輸出結果:
 i1==i2: false
 i3==i4: true
equals() 比較的是兩個對象的值(內容)是否相同。
"==" 比較的是兩個對象的引用(內存地址)是否相同,也用來比較兩個基本數據類型的變量值是否相等。

Integer i3 =new Integer(100); 
Integer i4 =new Integer(100); 
System.out.println("i3==i4: "+(i3==i4));//顯示false
情景2:
//在-128~127 之外的數
 Integer i1 =200;  
 int i2 =200;          
 System.out.println("i1==i2: "+(i1==i2));                   
 // 在-128~127 之內的數
 Integer i3 =100;  
 Integer i4 =100;  
 System.out.println("i3==i4: "+(i3==i4));
輸出結果:兩個都爲true
綜上所述:看源碼便知,Integer中把-128--127這256個數據緩存了下來。官方的說法是這些小的數字使用的頻率比較高,爲了優化性能,就把這之間的數緩存了下來。這就是爲什麼輸出結果是false和true了。當聲明的Inetger對象的值在-128--127之間時,引用的是緩存中的同一個對象(已經創建好保存在緩存中),所以結果是true;當聲明的Integer對象的值不在這個範圍之類的時候,就會通過new Integer(i);語句創建一個Integer對象。


發佈了27 篇原創文章 · 獲贊 6 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章