「JAVA」Java面向?qū)ο笾b類簸喂,拆箱毙死、裝箱

包裝類燎潮,拆箱喻鳄、裝箱——一切皆對(duì)象


為何要包裝類

? ? 1. 在面向?qū)ο笾?”一切皆對(duì)象”,但基本數(shù)據(jù)類型的特殊存在不太符合這一理念确封,面向?qū)ο竺嫦虻貌⒉患兇獬牵驗(yàn)榛绢愋妥兞坎⒉皇菍?duì)象再菊;

? ? 2. 涉及進(jìn)制間的轉(zhuǎn)換的算法,數(shù)據(jù)類型間的基本操作颜曾;如果都要我們來實(shí)現(xiàn)纠拔,那工作量就太大了;

? ? 3. Java的集合框架并不支持基本數(shù)據(jù)類型的存儲(chǔ)泛豪,只支持對(duì)象類型的存儲(chǔ)稠诲,支持基本類型存儲(chǔ)的就只有數(shù)組了;

故此诡曙,針對(duì)Java基本數(shù)據(jù)類型封裝了包裝類臀叙,每一個(gè)基本類型都有一個(gè)對(duì)應(yīng)的包裝類,以下是詳情:

基本數(shù)據(jù)類型的包裝類

八大基本數(shù)據(jù)類型的包裝類都使用final修飾价卤,都是最終類劝萤,都不能被繼承。

八大基本數(shù)據(jù)類型的包裝類??

拆箱和裝箱

裝箱:把基本類型數(shù)據(jù)轉(zhuǎn)成對(duì)應(yīng)的包裝類對(duì)象慎璧。

方式一:Integer i = Integer.value(13)床嫌;

方式二:Integer i = new Integer(13);


拆箱:把包裝類對(duì)象轉(zhuǎn)成對(duì)應(yīng)的基本數(shù)據(jù)類型數(shù)據(jù)。

int value = i.intValue();


自動(dòng)裝箱(Autoboxing)和自動(dòng)拆箱(AutoUnboxing)

在Java 5之前的版本中胸私,基本數(shù)據(jù)類型和包裝類之間的轉(zhuǎn)換是需要手動(dòng)進(jìn)行的,但Sun公司從Java5開始提供了的自動(dòng)裝箱(Autoboxing)和自動(dòng)拆箱(AutoUnboxing)操作 厌处;

自動(dòng)裝箱:可以把一個(gè)基本類型變量直接賦給對(duì)應(yīng)的包裝類型變量。比如:Integer i = 13;

自動(dòng)拆箱:允許把包裝類對(duì)象直接賦給對(duì)應(yīng)的基本數(shù)據(jù)類型變量岁疼。

比如:Integer i = new Integer(13);

? ? ? ? ? ?Int j = i;

自動(dòng)裝箱和自動(dòng)拆箱嘱蛋,也是一個(gè)語(yǔ)法糖/編譯器級(jí)別新特性,在底層依然是手動(dòng)裝箱五续、拆箱操作洒敏;但是在裝箱操作中使用的是Integer.valueOf()方法,而不是直接new Integer();其他的幾個(gè)包裝類也是如此疙驾,裝箱操作中使用的是各自的valueOf()方法凶伙。

自動(dòng)裝箱和自動(dòng)拆箱的反編譯效果


switch 對(duì)包裝類的支持

switch支持的基本數(shù)據(jù)類型:byte,short,char,int;也支持對(duì)應(yīng)的包裝類它碎。因?yàn)樵诘讓雍伲瑂witch中會(huì)對(duì)包裝類做手動(dòng)拆箱操作。

switch 中包裝類的支持


考慮后面這樣一句代碼:Object obj = 17;

在上述代碼語(yǔ)句中有如下的操作:

1. 自動(dòng)裝箱扳肛,把17自動(dòng)裝箱為Integer類型: Integer i = 17;

2. 引用的自動(dòng)類型轉(zhuǎn)換傻挂,把子類對(duì)象賦給父類變量: Object obj = i; 因?yàn)镺bject類是所有Java類的父類;因此挖息,Object類型可以接受一切數(shù)據(jù)類型的值金拒;Object數(shù)組:Object[],該數(shù)組可以保存一切數(shù)據(jù)類型。所以:Object[] arr = {“A”,12,3.14,true}; // 這是完全可行的


包裝類的常用操作方法(以Integer為例)

1. 包裝類中的常量:

? ? ?MAX_VALUE :最大值

? ? ?MIN_VALUE :最小值

? ? ?SIZE :變量在內(nèi)存中存儲(chǔ)數(shù)據(jù)占多少位

? ? ?TYPE :對(duì)應(yīng)的基本類型

2. 包裝類的構(gòu)造器:創(chuàng)建包裝類對(duì)象

案例代碼如下所示:

創(chuàng)建包裝類對(duì)象案例

其他的幾個(gè)包裝類型也是這樣的規(guī)律绪抛,具體實(shí)現(xiàn)查看源碼即可资铡。


3. 基本類型和包裝類型的轉(zhuǎn)換(裝箱和拆箱)

裝箱:

裝箱

拆箱:

拆箱


4. String和基本類型/包裝類型之間的轉(zhuǎn)換操作

把String轉(zhuǎn)換為包裝類類型

把String轉(zhuǎn)換為包裝類類型


把包裝類對(duì)象轉(zhuǎn)換為String

把包裝類對(duì)象轉(zhuǎn)換為String


把基本數(shù)據(jù)類型轉(zhuǎn)換為String

把基本數(shù)據(jù)類型轉(zhuǎn)換為String


把String轉(zhuǎn)換為基本數(shù)據(jù)類型

parseXxx(String s) : xxx表示8大基本數(shù)據(jù)類型,如:

把String轉(zhuǎn)換為基本數(shù)據(jù)類型


5. 對(duì)于Boolean來說

無(wú)論是使用new Boolean(“”); 還是Boolean.valueOf(“”), 只有使用true/TRUE會(huì)被認(rèn)為是true幢码,其他都是false笤休。

boolean 包裝類的字符串構(gòu)造器

包裝類中的緩存設(shè)計(jì)

在包裝類中提供了緩存設(shè)計(jì),會(huì)對(duì)一定范圍內(nèi)的數(shù)據(jù)作緩存症副,如果數(shù)據(jù)在范圍內(nèi)店雅,會(huì)優(yōu)先從緩存中取數(shù)據(jù),超出范圍才會(huì)創(chuàng)建新對(duì)象贞铣;Byte底洗、Short、Integer咕娄、Long:緩存[-128亥揖,127]區(qū)間的數(shù)據(jù);Character:緩存[0圣勒,127]區(qū)間的數(shù)據(jù)费变;包裝類中的緩存設(shè)計(jì),也稱為享元模式圣贸。

緩存設(shè)計(jì)會(huì)在包裝類中的valueOf()方法中實(shí)現(xiàn)挚歧,所以才會(huì)推薦使用valueOf()方法來實(shí)現(xiàn)拆箱操作,如下是Integer類的valueOf()源碼:

valueOf() 方法源碼


再查看緩存實(shí)現(xiàn)細(xì)節(jié):

IntegerCache 源碼


通過查看源碼可知吁峻,JVM會(huì)對(duì)-128 到 127之間的做緩存滑负,如果你的變量值在這個(gè)范圍內(nèi),就會(huì)優(yōu)先從緩存中取數(shù)據(jù)用含,否則就會(huì)創(chuàng)建新對(duì)象矮慕。當(dāng)然這個(gè)緩存區(qū)間也是可是設(shè)置的。

那么以下這個(gè)例子就可以解釋了:

享元模式 代碼案例

我們?cè)賮砜碔nteger的equals方法的實(shí)現(xiàn)源碼:

Integer的equals方法


可以發(fā)現(xiàn)啄骇,包裝類在比較時(shí)會(huì)將包裝類型拆箱為基本數(shù)據(jù)類型痴鳄,并使用==做比較


包裝類型和基本數(shù)據(jù)類型的區(qū)別

包裝類型和基本數(shù)據(jù)類型的區(qū)別(以Integer與int的區(qū)別為例):

1.默認(rèn)值:

????????int(基本數(shù)據(jù)類型呢)的默認(rèn)值是0缸夹。

????????Integer(包裝類型)的默認(rèn)值為null痪寻。Integer既可以表示null,又可以表示0虽惭。

2.包裝類中提供了該類型相關(guān)的很多算法操作方法:

包裝類中的算法操作

3.在集合框架中,只能存儲(chǔ)對(duì)象類型,不能存儲(chǔ)基本數(shù)據(jù)類型值橡类。

4.Integer和int并不是相同的數(shù)據(jù)類型,盡管值是相同的芽唇。Integer是一個(gè)類顾画,可以實(shí)例化為對(duì)象,但int只是一個(gè)基本數(shù)據(jù)類型。

5.在JVM中亲雪,基本類型變量存儲(chǔ)在棧中的,而包裝類型對(duì)象存放于堆中疚膊。

其實(shí)义辕,包裝類就是把基本數(shù)據(jù)類對(duì)象化,包裝類是基本數(shù)據(jù)類型的超集寓盗;在開發(fā)中灌砖,建議成員變量?jī)?yōu)先使用包裝類型,局部變量?jī)?yōu)先考慮基本數(shù)據(jù)類型傀蚌。

完結(jié)基显。老夫雖不正經(jīng),但老夫一身的才華

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末善炫,一起剝皮案震驚了整個(gè)濱河市撩幽,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌箩艺,老刑警劉巖窜醉,帶你破解...
    沈念sama閱讀 211,743評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異艺谆,居然都是意外死亡榨惰,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,296評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門静汤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來琅催,“玉大人,你說我怎么就攤上這事虫给√俾眨” “怎么了?”我有些...
    開封第一講書人閱讀 157,285評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵抹估,是天一觀的道長(zhǎng)杰捂。 經(jīng)常有香客問我,道長(zhǎng)棋蚌,這世上最難降的妖魔是什么嫁佳? 我笑而不...
    開封第一講書人閱讀 56,485評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮谷暮,結(jié)果婚禮上蒿往,老公的妹妹穿的比我還像新娘。我一直安慰自己湿弦,他們只是感情好瓤漏,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,581評(píng)論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般蔬充。 火紅的嫁衣襯著肌膚如雪蝶俱。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,821評(píng)論 1 290
  • 那天饥漫,我揣著相機(jī)與錄音榨呆,去河邊找鬼。 笑死庸队,一個(gè)胖子當(dāng)著我的面吹牛积蜻,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播彻消,決...
    沈念sama閱讀 38,960評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼竿拆,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了宾尚?” 一聲冷哼從身側(cè)響起丙笋,我...
    開封第一講書人閱讀 37,719評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎煌贴,沒想到半個(gè)月后不见,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,186評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡崔步,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,516評(píng)論 2 327
  • 正文 我和宋清朗相戀三年稳吮,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片井濒。...
    茶點(diǎn)故事閱讀 38,650評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡灶似,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出瑞你,到底是詐尸還是另有隱情酪惭,我是刑警寧澤,帶...
    沈念sama閱讀 34,329評(píng)論 4 330
  • 正文 年R本政府宣布者甲,位于F島的核電站春感,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏虏缸。R本人自食惡果不足惜鲫懒,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,936評(píng)論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望刽辙。 院中可真熱鬧窥岩,春花似錦、人聲如沸宰缤。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,757評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至朦乏,卻和暖如春球及,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背呻疹。 一陣腳步聲響...
    開封第一講書人閱讀 31,991評(píng)論 1 266
  • 我被黑心中介騙來泰國(guó)打工吃引, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人诲宇。 一個(gè)月前我還...
    沈念sama閱讀 46,370評(píng)論 2 360
  • 正文 我出身青樓际歼,卻偏偏與公主長(zhǎng)得像惶翻,于是被迫代替她去往敵國(guó)和親姑蓝。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,527評(píng)論 2 349

推薦閱讀更多精彩內(nèi)容