因為看到幾個很有意思的面試題,關於裝箱拆箱的,錯得一頭霧水
首先對於自動裝箱拆箱的定義,其實看這個你就明白了
integer i=100;
被自動轉換成integer i=integer.valueof(100);
就叫做自動裝箱。而拆箱呢,比如:integer i1=1;
integer i2=2;
int i3=i1+i2;//包裝器型別拆成基本資料型別完成算數運算
然後進入正題吧
string s1="asdf";
string s2="asdf";
s1==s2; (true)//除非是new乙個string物件,否則只要是像這樣隱式裝箱,字串內容相同,返回的都是同乙個物件的引用。
s1.equals(s2); (true)
integer i1=12;
integer i2=12;
integer i3=300;
integer i4=300;
i1==i2; (true)
i1.equals(i2); (true)//僅在數值大於等於-128且小於等於127時,因為這種情況時裝箱操作返回的是同乙個快取物件的引用
//而超過這個值以後每次返回的是新建立物件的引用,像這樣有資料範圍區別的基本型別還有long(-128<=i<=127)
//byte(-128<=i<=127) short(-128<=i<=127) char(i<=127)(依然強調你不能超過它本身表示資料的範圍)
i3==i4; (false)
i3.equals(i4); (true)
double float並不存在此種情況,這是由包裝器類的valueof方法決定的
double d1=12.3;
double d2=12.3;
d1==d2; (false) //無論值是什麼都是這種結果 因為他們的valueof每次都返回的新物件引用
d1.equals(d2); (true)
boolean b1=true;
boolean b2=true;
b1==b2; (true)
b1.equals(b2); (true)
boolean的valueof方法每次返回的都是快取物件的引用,從不新建物件,所以位址都是相同的.
java自動裝箱拆箱
基本資料型別的自動裝箱 autoboxing 拆箱 unboxing 是自j2se 5.0開始提供的功能。一般我們要建立乙個類的物件例項的時候,我們會這樣 class a new class parameter 當我們建立乙個integer物件時,卻可以這樣 integer i 100 注意 不是 ...
Java 自動裝箱與拆箱
什麼是自動裝箱拆箱 基本資料型別的自動裝箱 autoboxing 拆箱 unboxing 是自j2se 5.0開始提供的功能。一般我們要建立乙個類的物件的時候,我們會這樣 class a newclass parameter 當我們建立乙個integer物件時,卻可以這樣 integer i 100...
Java 自動裝箱與拆箱
什麼是自動裝箱拆箱 基本資料型別的自動裝箱 autoboxing 拆箱 unboxing 是自j2se5.0開始提供的功能。一般我們要建立乙個類的物件的時候,我們會這樣 class a new class parameter 當我們建立乙個integer物件時,卻可以這樣 integer i 100...