日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > java >内容正文

java

深入浅出 Java 中的包装类

發(fā)布時(shí)間:2023/12/3 java 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 深入浅出 Java 中的包装类 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

轉(zhuǎn)載自? ?深入淺出 Java 中的包裝類

前陣子,我們分享了《Java中的基本數(shù)據(jù)類型轉(zhuǎn)換》這篇文章,對(duì)許多粉絲還是有帶來幫助的,今天講一下 Java 包裝類的的由來,及自動(dòng)裝箱、拆箱的概念和原理。

什么是包裝類型

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)的包裝類型。

基本數(shù)據(jù)類型包裝類型
byteByte
booleanBoolean
shortShort
charCharacter
intInteger
longLong
floatFloat
doubleDouble

下面是包裝類型的繼承結(jié)構(gòu)圖。

?

?

從以上圖表可以對(duì)基本類型和包裝類型有一個(gè)全面的了解。

包裝類應(yīng)用場(chǎng)景

1、集合類泛型只能是包裝類;

//?編譯報(bào)錯(cuò) List<int>?list1?=?new?ArrayList<>();//?正常 List<Integer>?list2?=?new?ArrayList<>();

2、成員變量不能有默認(rèn)值;

private?int?status;

基本數(shù)據(jù)類型的成員變量都有默認(rèn)值,如以上代碼 status 默認(rèn)值為 0,如果定義中 0 代表失敗,那樣就會(huì)有問題,這樣只能使用包裝類 Integer,它的默認(rèn)值為 null,所以就不會(huì)有默認(rèn)值影響。

3、方法參數(shù)允許定義空值;

private?static?void?test1(int?status){System.out.println(status); }

看以上代碼,方法參數(shù)定義的是基本數(shù)據(jù)類型 int,所以必須得傳一個(gè)數(shù)字過來,不能傳 null,很多場(chǎng)合我們希望是能傳遞 null 的,所以這種場(chǎng)合用包裝類比較合適。

還有更多應(yīng)用場(chǎng)景就不一一例舉了,歡迎留言共同探討包裝類的更多的應(yīng)用場(chǎng)景。

自動(dòng)裝箱、拆箱

Java 5 增加了自動(dòng)裝箱、拆箱機(jī)制,提供基本數(shù)據(jù)類型和包裝類型的相互轉(zhuǎn)換操作。

自動(dòng)裝箱

自動(dòng)裝箱即自動(dòng)將基本數(shù)據(jù)類型轉(zhuǎn)換成包裝類型,在 Java 5 之前,要將基本數(shù)據(jù)類型轉(zhuǎn)換成包裝類型只能這樣做,看下面的代碼。

Integer?i1?=?new?Integer(8);Integer?i2?=?Integer.valueOf(8);//?自動(dòng)裝箱 Integer?i3?=?8;

以上 3 種都可以進(jìn)行轉(zhuǎn)換,但在 Java 5 之前第 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)拆箱 int?i4?=?i3;int?i5?=?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ì)請(qǐng)參考《IntegerCache的妙用和陷阱》這篇文章。

總結(jié)

以上是生活随笔為你收集整理的深入浅出 Java 中的包装类的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。