8.1-全棧Java筆記:基本數(shù)據(jù)類型的包裝類

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

包裝類基本知識

Java是面向?qū)ο蟮恼Z言号坡,但不是“純面向?qū)ο蟆卑揪埽緮?shù)據(jù)類型就不是對象。但是我們在實際使用中經(jīng)常需要將基本數(shù)據(jù)轉(zhuǎn)化成對象柄慰,便于操作。?比如:Object[]數(shù)組税娜、集合的操作中坐搔。

為了解決這個不足,在設(shè)計類時為每個基本數(shù)據(jù)類型設(shè)計了一個對應(yīng)的類進行代表敬矩,這樣八個和基本數(shù)據(jù)類型對應(yīng)的類統(tǒng)稱為包裝類(Wrapper Class)概行。

包裝類的作用是:實現(xiàn)基本數(shù)據(jù)類型、包裝類對象弧岳、字符串和數(shù)字轉(zhuǎn)換等凳忙。

【示例1】初識包裝類

public?class?WrapperClassTest {

????public?static?void?main(String[] args){

?????? Integer i=new?Integer(10);

?????? Integer j=new?Integer(50);

??? }??

}

?示例1?內(nèi)存分析圖

包裝類均位于java.lang包业踏,包裝類和基本數(shù)據(jù)類型的對應(yīng)關(guān)系如表所示:

在這八個類名中,除了Integer和Character類以外涧卵,其它六個類的類名和基本數(shù)據(jù)類型一致勤家,只是類名的第一個字母大寫即可。


在這八個類中柳恐,除了Character和Boolean都是“數(shù)字型”伐脖,數(shù)字型是java.lang.Number的子類。Number類是抽象類乐设,因此它的抽象方法讼庇,所有子類都需要提供實現(xiàn)。Number類提供了抽象方法:intValue()近尚、longValue()蠕啄、floatValue()、doubleValue()戈锻,意味著所有的數(shù)字型包裝類都可以互相轉(zhuǎn)型歼跟。

包裝類的用途

對于包裝類說,這些類的用途主要包含兩種:

1.???作為和基本數(shù)據(jù)類型對應(yīng)的類類型存在舶沛,方便涉及到對象的操作嘹承。

2.???包含每種基本數(shù)據(jù)類型的相關(guān)屬性如最大值、最小值等如庭,以及相關(guān)的操作方法(這些操作方法的作用是在基本類型數(shù)據(jù)叹卷、包裝類對象、字符串之間提供轉(zhuǎn)化F核)骤竹。

【示例2】包裝類的使用

public?class?Test {

??? /**

??? ?*?測試Integer的用法,其他包裝類類似

??? ?*/

????void?testInteger(){

???????//基本類型轉(zhuǎn)化成Integer對象

?????? Integer int1 =?new?Integer(10);

?????? Integer int2 = Integer.valueOf(20);??? //官方推薦這種寫法

???????//Integer對象轉(zhuǎn)化成int

???????int?a = int1.intValue();

???????//字符串轉(zhuǎn)化成Integer對象

?????? Integer int3 = Integer.parseInt("334");

?????? Integer int4 =?new?Integer("999");

???????//Integer對象轉(zhuǎn)化成字符串

?????? String str1 = int3.toString();

?????? System.out.println("int能表示的最大整數(shù):"+Integer.MAX_VALUE);? //一些常見int類型相關(guān)的常量

??? }

}

自動裝箱和拆箱

自動裝箱和拆箱就是將基本類型和包裝類進行自動的互相轉(zhuǎn)換往毡。JDK5.0后蒙揣,將自動裝箱(autoboxing)/拆箱(unboxing)引入Java中。

自動裝箱:基本類型數(shù)據(jù)處于需要對象的環(huán)境中時开瞭,會自動轉(zhuǎn)為“對象”懒震。

自動拆箱:每當需要一個值時,對象會自動轉(zhuǎn)成基本類型數(shù)據(jù)嗤详,?沒必要再去顯式調(diào)用intValue个扰、doubleValue()等轉(zhuǎn)型方法。

自動裝箱與拆箱的功能事實上是編譯器來幫您的忙葱色,編譯器在編譯時期依您所編寫的語法递宅,決定是否進行裝箱或拆箱動作,如7-3所示。

【示例3】自動裝箱

Integer i = 100;

//相當于編譯器自動為您作以下的語法編譯:

Integer i =?new?Integer(100);?

所以自動裝箱與拆箱的功能是所謂的“編譯器蜜糖”(Compiler Sugar)办龄,雖然使用這個功能很方便烘绽,但在程序運行階段您得了解Java的語義。例如7-4所示的程序是可以通過編譯的:

【示例4】包裝類空指針異常問題

Integer i =?null;

int?j = i;

//這樣的語法在編譯時期是合法的俐填,但是在運行時期會有錯誤安接,因為這種寫法相當于:

Integer i =?null;

int?j = i.intValue();

null表示i沒有參考至任何的對象實體,它可以合法地指定給對象參考名稱英融。由于實際上i并沒有參考至任何的對象赫段,所以也就不可能操作intValue()方法,這樣上面的寫法在運行時會出現(xiàn)NullPointerException錯誤矢赁。

【示例5】自動裝箱與拆箱

??? /**

??? ?*?測試自動裝箱和拆箱

??? ?*?結(jié)論:雖然很方便,但是如果不熟悉特殊情況贬丛,可能會出錯撩银!

??? ?*/

????static?void?testBoxing(){

?????? Integer b = 23;??? //自動裝箱

???????int?a =?new?Integer(20);??? //自動拆箱

?????? //自動裝箱和拆箱,實際上是編譯器替我們完成了代碼的自動編譯豺憔,比如:Integer b = 23,?其實運行時執(zhí)行的仍然是:Integer b = new Integer(23);

???????//下面的問題我們需要注意:

//???? Integer? c = null;

//???? int d = c;??? //此處其實就是:c.intValue(),因此拋空指針異常额获。

??? }

·[-128,127]緩存問題

自動裝箱時,對于-128-127之間的值,?為了提高效率Integer類會進行緩存處理恭应,?這個區(qū)間的值仍然會當做基本數(shù)據(jù)類型處理抄邀,這個范圍之外當做對象來處理。Integer類相關(guān)源碼如下:

????public?static?? Integer?valueOf(int?i) ? {

????final?int?? offset = 128;

????if?(i ? >= -128 && i <= 127) {?// ? must cache

??? ????return?? IntegerCache.cache[i + offset];

??? }

????????return?new?? Integer(i);

??? }

測試代碼如下:

public?static?void?? main(String[] args) {

??? Integer h = 100;???? Integer ? u = 100;

??? Integer h2 = 200;??? Integer ? u2 = 200;

??? System.out.println(h==u);???//true -128-127之間昼榛,仍然會當做基本數(shù)據(jù)類型

??? System.out.println(h2==u2);?//false?會當做真正對象處理

}

?




「全棧Java筆記」是一部能幫大家從零到一成長為全棧Java工程師系列筆記境肾。筆者江湖人稱 Mr. G,10年Java研發(fā)經(jīng)驗胆屿,曾在神州數(shù)碼奥喻、航天院某所研發(fā)中心從事軟件設(shè)計及研發(fā)工作,從小白逐漸做到工程師非迹、高級工程師环鲤、架構(gòu)師。精通Java平臺軟件開發(fā)憎兽,精通JAVAEE冷离,熟悉各種流行開發(fā)框架。


筆記包含從淺入深的六大部分:

A-Java入門階段

B-數(shù)據(jù)庫從入門到精通

C-手刃移動前端和Web前端

D-J2EE從了解到實戰(zhàn)

E-Java高級框架精解

F-Linux和Hadoop?

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末纯命,一起剝皮案震驚了整個濱河市西剥,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌扎附,老刑警劉巖蔫耽,帶你破解...
    沈念sama閱讀 216,692評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡匙铡,警方通過查閱死者的電腦和手機图甜,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,482評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來鳖眼,“玉大人黑毅,你說我怎么就攤上這事∏栈洌” “怎么了矿瘦?”我有些...
    開封第一講書人閱讀 162,995評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長愿卒。 經(jīng)常有香客問我缚去,道長,這世上最難降的妖魔是什么琼开? 我笑而不...
    開封第一講書人閱讀 58,223評論 1 292
  • 正文 為了忘掉前任易结,我火速辦了婚禮,結(jié)果婚禮上柜候,老公的妹妹穿的比我還像新娘搞动。我一直安慰自己,他們只是感情好渣刷,可當我...
    茶點故事閱讀 67,245評論 6 388
  • 文/花漫 我一把揭開白布鹦肿。 她就那樣靜靜地躺著,像睡著了一般辅柴。 火紅的嫁衣襯著肌膚如雪箩溃。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,208評論 1 299
  • 那天碌嘀,我揣著相機與錄音碾篡,去河邊找鬼。 笑死筏餐,一個胖子當著我的面吹牛开泽,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播魁瞪,決...
    沈念sama閱讀 40,091評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼穆律,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了导俘?” 一聲冷哼從身側(cè)響起峦耘,我...
    開封第一講書人閱讀 38,929評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎旅薄,沒想到半個月后辅髓,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體泣崩,經(jīng)...
    沈念sama閱讀 45,346評論 1 311
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,570評論 2 333
  • 正文 我和宋清朗相戀三年洛口,在試婚紗的時候發(fā)現(xiàn)自己被綠了矫付。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,739評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡第焰,死狀恐怖买优,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情挺举,我是刑警寧澤杀赢,帶...
    沈念sama閱讀 35,437評論 5 344
  • 正文 年R本政府宣布,位于F島的核電站湘纵,受9級特大地震影響脂崔,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜梧喷,卻給世界環(huán)境...
    茶點故事閱讀 41,037評論 3 326
  • 文/蒙蒙 一脱篙、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧伤柄,春花似錦、人聲如沸文搂。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,677評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽煤蹭。三九已至笔喉,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間硝皂,已是汗流浹背常挚。 一陣腳步聲響...
    開封第一講書人閱讀 32,833評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留稽物,地道東北人奄毡。 一個月前我還...
    沈念sama閱讀 47,760評論 2 369
  • 正文 我出身青樓,卻偏偏與公主長得像贝或,于是被迫代替她去往敵國和親吼过。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,647評論 2 354

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

  • 深入理解Java中的包裝類與自動拆裝箱 文章出處:安卓進階學習指南 作者:麥田哥(Whea...
    wheat7閱讀 2,627評論 2 11
  • Java8張圖 11咪奖、字符串不變性 12盗忱、equals()方法、hashCode()方法的區(qū)別 13羊赵、...
    Miley_MOJIE閱讀 3,701評論 0 11
  • 十幾年前趟佃,我們滿懷欣喜的迎接了這個小生命的到來。那一聲啼哭,帶來的是為父為母的滿滿的喜悅與幸福闲昭,從此暗下決心罐寨,要給...
    plm子衿閱讀 133評論 0 0
  • 住的小區(qū)是政府安置那些田地被征用的農(nóng)戶的,這里的每個家庭至少有兩套房子汤纸,一般一套是自己住衩茸,另外一套出租,多出的那套...
    殘劍閱讀 1,013評論 4 10
  • 閱讀對人性格的影響是一個潛移默化的過程贮泞,你自己不一定能感受到這種變化楞慈,但它確實在發(fā)生。年輕時閱讀的啃擦,往往價值不大囊蓝,...
    小婦阿達閱讀 118評論 2 1