Java知識點梳理——裝箱和拆箱

來源:互聯網
上載者:User

標籤:long   程式   面向   設計   head   間接   類型   自動   rac   

1、前言:Java是典型的物件導向程式設計語言,但其中有8種基礎資料型別 (Elementary Data Type)不支援物件導向編程,基礎資料型別 (Elementary Data Type)不具備對象的特性,沒有屬性和方法;Java為此8種基礎資料型別 (Elementary Data Type)設計了對應的類(封裝類),使之相互轉換,間接實現基礎資料型別 (Elementary Data Type)具備對象特性,豐富基礎資料型別 (Elementary Data Type)操作;

基礎資料型別 (Elementary Data Type) 封裝類
byte Byte
short Short
int Integer
long Long
char Character
float Float
double Double
boolean Boolean


 

 

 

 

 

 


 註:int是基本數量類型,Integer是類;int和Ingeger初始值不同(int預設值0 Ingeger預設值null);Integer包含屬性和方法,int則沒有;基礎資料型別 (Elementary Data Type)和封裝類相互轉換的過程叫裝箱和拆箱;

2、裝箱:基礎資料型別 (Elementary Data Type)轉換成對應的封裝類(int——>Integer);

1 Integer i = new Integer(10); // 手動裝箱2 Integer i = 10; // 自動裝箱

3、拆箱:封裝類轉換成基礎資料型別 (Elementary Data Type)(Integer——>int);

1 Integer i =10; // 自動裝箱2 int m = i; // 自動拆箱3 int n = i.intValue(); // 手動拆箱

4、自動裝箱和自動拆箱:Java 1.5以後才有自動裝箱、拆箱的特性;自動裝箱是通過封裝類的valueOf方法實現;自動拆箱是通過封裝類的xxxValue方法實現;

1 Integer i = Integer.valueOf(10); // 調用valueOf方法自動裝箱2 int n = i.intValue(); // 調用intValue方法自動拆箱

 註:自動裝箱會隱式地建立對象,在一個迴圈中注意自動裝箱問題,影響程式效能;

5、equals 和 == 比較:當 "=="運算子的兩個運算元都是封裝類,則是比較指向的是否是同一個對象,而如果其中有一個運算元是運算式(即包含算術運算)則比較的是數值(觸發自動拆箱);對於封裝類,equals方法不會進行類型轉換;

 1 public class Main { 2     public static void main(String[] args) { 3           4         Integer a = 1; 5         Integer b = 2; 6         Integer c = 3; 7         Integer d = 3; 8         Integer e = 321; 9         Integer f = 321;10         Long g = 3L;11         Long h = 2L;12          13         System.out.println(c==d); // true14         System.out.println(e==f); // false15         System.out.println(c==(a+b)); // true16         System.out.println(c.equals(a+b)); // true17         System.out.println(g==(a+b)); // true18         System.out.println(g.equals(a+b)); // false19         System.out.println(g.equals(a+h)); // true20     }21 }

 解析:JVM會緩衝-128到127的Integer對象(Short、Byte、Character、Long與Integer類似),所以第一個是同一個對象true,第二個是new的新對象false;第三個有+法運算比較的是兩邊的值true;第四個有+法運算且兩邊的資料類型相同true;第五個同四先求+法求和 ,==會進行類型轉換(Long)true;第六個先+法求和,equals不會類型轉換false;第七個先+法求和(觸發拆箱,變成了int類型和long類型相加,這個會觸發類型晉陞,結果是long類型的)equals比較時觸發裝箱比較兩邊都是Long類型結果true;

 

Java知識點梳理——裝箱和拆箱

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.