Java 自動裝箱與拆箱

原文地址:http://www.cnblogs.com/danne823/archive/2011/04/22/2025332.html

??什麼是自動裝箱拆箱

基本數據類型的自動裝箱(autoboxing)、拆箱(unboxing)是自J2SE5.0開始提供的功能。 

一般我們要創建一個類的對象的時候,我們會這樣:

 Class a = new Class(parameter);

當我們創建一個Integer對象時,卻可以這樣:

 Integer i = 100; (注意:不是 int i = 100; )

實際上,執行上面那句代碼的時候,系統爲我們執行了:Integer i = new Integer(100); 此即基本數據類型的自動裝箱功能。

??基本數據類型與對象的差別 

基本數據類型不是對象,也就是使用int、double、boolean等定義的變量、常量。

基本數據類型沒有可調用的方法。

eg:

int t= 1;     t.  後面是沒有方法滴。

Integert =1; t.  後面就有很多方法可讓你調用了。

??什麼時候自動裝箱

  例如:Integer i = 100;

     相當於編譯器自動爲您作以下的語法編譯:Integeri = new Integer(100);

??什麼時候自動拆箱

自動拆箱(unboxing),也就是將對象中的基本數據從對象中自動取出。如下可實現自動拆箱:

Integer    i=10;//裝箱

Int t=i;//拆箱

  在進行運算時,也可以進行自動裝箱與拆箱。

Integer i=10;

System.out.println(i++);

??Integer的自動裝箱

//-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() 比較的是兩個對象的值(內容)是否相同。

"==" 比較的是兩個對象的引用(內存地址)是否相同,也用來比較兩個基本數據類型的變量值是否相等。

 

在自動裝箱時對於值從–128到127之間的值,它們被裝箱爲Integer對象後,會存在內存中被重用,所以範例中,i3 與 i4實際上參考至同一個對象。如果超過了從–128到127之間的值,被裝箱後的Integer對象並不會被重用,即相當於每次裝箱時都新建一個Integer對象,所以範例中,i1與i2參考的是不同的對象。

另外,當不使用自動裝箱功能的時候,情況與普通類對象一樣,請看下例:

Integer i3=new Integer(100);

Integer i4=new Integer(100);

System.out.println("i3==i4:"+(i3==i4));//顯示false

(感謝易之名的提醒O(∩_∩)O~)

??String 的拆箱裝箱

先看個例子:

String str1="abc";

String str2="abc";

System.out.println(str2==str1);//輸出爲 true

System.out.println(str2.equals(str1));//輸出爲 true 

Stringstr3=newString("abc");

Stringstr4=newString("abc");

System.out.println(str3==str4);//輸出爲 false

System.out.println(str3.equals(str4));//輸出爲 true

 

這個怎麼解釋呢?貌似看不出什麼。那再看個例子。

String d="2";

String e="23";

e=e.substring(0,1);

System.out.println(e.equals(d));//輸出爲 true 

System.out.println(e==d);//輸出爲 false 

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