原文地址: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