java自動裝箱拆箱

2021-07-09 18:01:05 字數 1292 閱讀 1534

因為看到幾個很有意思的面試題,關於裝箱拆箱的,錯得一頭霧水
首先對於自動裝箱拆箱的定義,其實看這個你就明白了

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...