什么是包裝類型
Java設(shè)計(jì)當(dāng)初就提供了8種基本數(shù)據(jù)類型及對(duì)應(yīng)的8種包裝數(shù)據(jù)類型。我們知道Java是一種面向?qū)ο缶幊痰母呒?jí)語言,所以包裝類型正是為了解決基本數(shù)據(jù)類型無法面向?qū)ο缶幊趟峁┑摹?/p>
下面是基本數(shù)據(jù)類型與對(duì)應(yīng)的包裝類型。
下面是包裝類型的繼承結(jié)構(gòu)圖。
從以上圖表可以對(duì)基本類型和包裝類型有一個(gè)全面的了解。
包裝類應(yīng)用場景
1.集合類泛型只能是包裝類;
//編譯報(bào)錯(cuò)Listlist1=newArrayList<>();//正常Listlist2=newArrayList<>();
2.成員變量不能有默認(rèn)值;
privateintstatus;
基本數(shù)據(jù)類型的成員變量都有默認(rèn)值,如以上代碼status默認(rèn)值為0,如果定義中0代表失敗,那樣就會(huì)有問題,這樣只能使用包裝類Integer,它的默認(rèn)值為null,所以就不會(huì)有默認(rèn)值影響。
3.方法參數(shù)允許定義空值;
privatestaticvoidtest1(intstatus){System.out.println(status);}
看以上代碼,方法參數(shù)定義的是基本數(shù)據(jù)類型int,所以必須得傳一個(gè)數(shù)字過來,不能傳null,很多場合我們希望是能傳遞null的,所以這種場合用包裝類比較合適。
還有更多應(yīng)用場景就不一一例舉了,歡迎留言共同探討包裝類的更多的應(yīng)用場景。
自動(dòng)裝箱、拆箱
Java5增加了自動(dòng)裝箱、拆箱機(jī)制,提供基本數(shù)據(jù)類型和包裝類型的相互轉(zhuǎn)換操作。
自動(dòng)裝箱
自動(dòng)裝箱即自動(dòng)將基本數(shù)據(jù)類型轉(zhuǎn)換成包裝類型,在Java5之前,要將基本數(shù)據(jù)類型轉(zhuǎn)換成包裝類型只能這樣做,看下面的代碼。
Integeri1=newInteger(8);Integeri2=Integer.valueOf(8);//自動(dòng)裝箱Integeri3=8;
以上3種都可以進(jìn)行轉(zhuǎn)換,但在Java5之前第3種方法是編譯失敗的,第3種方法也正是現(xiàn)在的自動(dòng)裝箱功能。另外,第一種構(gòu)造器方法也不推薦使用了,已經(jīng)標(biāo)為廢棄了。
其實(shí)自動(dòng)裝箱的原理就是調(diào)用包裝類的valueOf方法,如第2個(gè)方法中的Integer.valueOf方法。
自動(dòng)拆箱
自動(dòng)拆箱即自動(dòng)將包裝類型轉(zhuǎn)換成基本數(shù)據(jù)類型,與自動(dòng)裝箱相反,有裝就有拆,很好理解。
//自動(dòng)拆箱inti4=i3;inti5=i3.intValue();
繼續(xù)上面的例子,把i3賦值給i4就是實(shí)現(xiàn)的自動(dòng)拆箱功能,自動(dòng)裝箱的原理就是調(diào)用包裝類的xxValue方法,如i5中的Integer的intValue方法。
自動(dòng)裝箱、拆箱不只是體現(xiàn)在以上的例子,在方法接收參數(shù)、對(duì)象設(shè)置參數(shù)時(shí)都能自動(dòng)裝箱拆箱。
需要注意的是,關(guān)于Integer,-128~127會(huì)有緩存,對(duì)比這個(gè)范圍的值的對(duì)象是一個(gè)坑,這個(gè)在阿里巴巴規(guī)范中也有提及。
以上就是長沙一度軟件培訓(xùn)java培訓(xùn)機(jī)構(gòu)的小編針對(duì)“夯實(shí)基礎(chǔ):Java數(shù)據(jù)類型的包裝類”的內(nèi)容進(jìn)行的回答,希望對(duì)大家有所幫助,如有疑問,請?jiān)诰€咨詢,有專業(yè)老師隨時(shí)為你服務(wù)。