java包裝類

java包裝類是為了解決java基本類型在面向?qū)ο筮^(guò)程中的一些不足。如,java基本類型不能存儲(chǔ)在集合類型中(如List),因此為8大基本類型設(shè)計(jì)了對(duì)應(yīng)的包裝類型,并在java5后實(shí)現(xiàn)了自動(dòng)拆箱裝箱功能(即在在包裝類型及對(duì)應(yīng)的基本類型間實(shí)現(xiàn)了自動(dòng)轉(zhuǎn)換的功能,可以基本類型自動(dòng)裝箱成包裝類型,也可以把包裝類型自動(dòng)拆箱成基本類型)。

裝箱:將基本類型轉(zhuǎn)換成包裝類型的過(guò)程叫做裝箱。
拆箱:將包裝類型轉(zhuǎn)換成基本類型的過(guò)程叫做拆箱。

image.png

對(duì)應(yīng)的類繼承關(guān)系

image.png

從上圖可知,數(shù)字類型包裝類繼承Number類。

// 裝箱
Integer integer1 = new Integer(1);
// 拆箱
int integer2 = integer1.intValue();

JDK1.5之后提供自動(dòng)拆裝箱。
// 自動(dòng)裝箱
Integer integer1 = 1; //自動(dòng)把int類型轉(zhuǎn)換成Integer類型
// 自動(dòng)拆箱
int integer2 = integer1 // 自動(dòng)把Integer類型拆箱成int類型

(注意:int 是基本類型,不是對(duì)象,沒有對(duì)象的特性,如不能放到集合List中,Integer 是對(duì)象,擁有對(duì)象的特性)

基本類型與包裝類型的相互轉(zhuǎn)換


image.png

基本數(shù)據(jù)類型和包裝類的區(qū)別
定義不同:包裝類屬于對(duì)象,基本數(shù)據(jù)類型不是
聲明和使用方式不同:包裝類使用new初始化,有些集合類的定義不能使用基本數(shù)據(jù)類型,例如 ArrayList<Integer>
初始值不同:包裝類默認(rèn)值為null,基本數(shù)據(jù)類型則不同的類型不一樣(具體見上表)
存儲(chǔ)方式和位置不同:從而性能不同,基本數(shù)據(jù)類型存儲(chǔ)在棧(stack)中,包裝類則分成引用和實(shí)例,引用在棧(stack)中,具體實(shí)例在堆(heap)中。可以通過(guò)程序來(lái)驗(yàn)證速度的不同。

傳遞方式不同:基本數(shù)據(jù)類型變量空間里面存儲(chǔ)的是值,傳遞的也是值,一個(gè)改變,另外一個(gè)不變,而包裝類屬于引用數(shù)據(jù)類型,變量空間存儲(chǔ)的是地址(引用),傳遞的也是引用,一個(gè)變,另外一個(gè)跟著變。

使用場(chǎng)景
1:包裝類型可以放到集合中,基本類型不可以,遇到需要放到集合中一般使用包裝類型
2:包裝類型是對(duì)象,遇到考慮使用對(duì)象的特性時(shí),使用包裝類型,如果存儲(chǔ)到集合中,使用泛型特性等。
3:包裝類型是對(duì)象,基本類型不是,一般包裝類型對(duì)象占用內(nèi)存比基本類型多,如果不使用對(duì)象特性,又考慮性能時(shí)使用包裝類型。
4:基本類型與包裝類型會(huì)有自動(dòng)拆箱裝箱動(dòng)作,如果不需要相互轉(zhuǎn)換的,前后定義保持一致,可避免自動(dòng)拆箱裝箱開銷。

參考:
https://www.cnblogs.com/yychuyu/p/13263216.html
https://zhuanlan.zhihu.com/p/65538963
https://blog.csdn.net/xialei199023/article/details/63251295
https://juejin.im/post/6844903934272749576

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容