摘要:前陣子,我們分享了中的基本數(shù)據(jù)類型轉(zhuǎn)換這篇文章,對(duì)許多粉絲還是有帶來(lái)幫助的,今天講一下包裝類的的由來(lái),及自動(dòng)裝箱拆箱的概念和原理。下面是基本數(shù)據(jù)類型與對(duì)應(yīng)的包裝類型。
前陣子,我們分享了《Java中的基本數(shù)據(jù)類型轉(zhuǎn)換》這篇文章,對(duì)許多粉絲還是有帶來(lái)幫助的,今天講一下 Java 包裝類的的由來(lái),及自動(dòng)裝箱、拆箱的概念和原理。
什么是包裝類型Java 設(shè)計(jì)當(dāng)初就提供了 8 種 基本數(shù)據(jù)類型及對(duì)應(yīng)的 8 種包裝數(shù)據(jù)類型。我們知道 Java 是一種面向?qū)ο缶幊痰母呒?jí)語(yǔ)言,所以包裝類型正是為了解決基本數(shù)據(jù)類型無(wú)法面向?qū)ο缶幊趟峁┑摹?/p>
下面是基本數(shù)據(jù)類型與對(duì)應(yīng)的包裝類型。
基本數(shù)據(jù)類型 | 包裝類型 |
---|---|
byte | Byte |
boolean | Boolean |
short | Short |
char | Character |
int | Integer |
long | Long |
float | Float |
double | Double |
下面是包裝類型的繼承結(jié)構(gòu)圖。
從以上圖表可以對(duì)基本類型和包裝類型有一個(gè)全面的了解。
包裝類應(yīng)用場(chǎng)景1、集合類泛型只能是包裝類;
// 編譯報(bào)錯(cuò) Listlist1 = new ArrayList<>(); // 正常 List 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ù)字過來(lái),不能傳 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的妙用和陷阱》這篇文章。
更多干貨推薦
1.史上最強(qiáng) Java 中高級(jí)面試題整理
2.史上最強(qiáng) Spring Boot & Cloud 教程整理
3.史上最強(qiáng)架構(gòu)設(shè)計(jì)分布式技術(shù)干貨整理
更多請(qǐng)掃描下方的二維碼關(guān)注我們的微信公眾號(hào),干貨每日推送!
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/77301.html
摘要:相等判斷符介紹相等判斷符用于比較基本數(shù)據(jù)類型和引用類型數(shù)據(jù)當(dāng)比較基本數(shù)據(jù)類型的時(shí)候比較的是數(shù)值當(dāng)比較引用類型數(shù)據(jù)時(shí)比較的是引用指針判斷基本類型是否相等首先基本數(shù)據(jù)類型指的是中的八大數(shù)據(jù)類型這八大基本數(shù)據(jù)類型有個(gè)共同的特點(diǎn)是它們?cè)趦?nèi)存中是有具相等判斷符==介紹 ? ==相等判斷符用于比較基本數(shù)據(jù)類型和引用類型數(shù)據(jù). 當(dāng)比較基本數(shù)據(jù)類型的時(shí)候比較的是數(shù)值, 當(dāng)比較引用類型數(shù)據(jù)時(shí)比較的是引用(指...
摘要:相等判斷符介紹相等判斷符用于比較基本數(shù)據(jù)類型和引用類型數(shù)據(jù)當(dāng)比較基本數(shù)據(jù)類型的時(shí)候比較的是數(shù)值當(dāng)比較引用類型數(shù)據(jù)時(shí)比較的是引用指針判斷基本類型是否相等首先基本數(shù)據(jù)類型指的是中的八大數(shù)據(jù)類型這八大基本數(shù)據(jù)類型有個(gè)共同的特點(diǎn)是它們?cè)趦?nèi)存中是有具相等判斷符==介紹 ==相等判斷符用于比較基本數(shù)據(jù)類型和引用類型數(shù)據(jù). 當(dāng)比較基本數(shù)據(jù)類型的時(shí)候比較的是數(shù)值, 當(dāng)比較引用類型數(shù)據(jù)時(shí)比較的是引用(指針...
摘要:相等判斷符介紹相等判斷符用于比較基本數(shù)據(jù)類型和引用類型數(shù)據(jù)當(dāng)比較基本數(shù)據(jù)類型的時(shí)候比較的是數(shù)值當(dāng)比較引用類型數(shù)據(jù)時(shí)比較的是引用指針判斷基本類型是否相等首先基本數(shù)據(jù)類型指的是中的八大數(shù)據(jù)類型這八大基本數(shù)據(jù)類型有個(gè)共同的特點(diǎn)是它們?cè)趦?nèi)存中是有具相等判斷符==介紹 ==相等判斷符用于比較基本數(shù)據(jù)類型和引用類型數(shù)據(jù). 當(dāng)比較基本數(shù)據(jù)類型的時(shí)候比較的是數(shù)值, 當(dāng)比較引用類型數(shù)據(jù)時(shí)比較的是引用(指針...
摘要:的實(shí)例不能共享使用,它也是線程不安全的。因此最佳的范圍是請(qǐng)求或方法范圍定義局部變量使用。在中就不需要直接對(duì)數(shù)據(jù)庫(kù)的連接參數(shù)進(jìn)行硬編碼了。 轉(zhuǎn)載請(qǐng)務(wù)必注明出處,原創(chuàng)不易! 相關(guān)文章:通過項(xiàng)目逐步深入了解Mybatis 本項(xiàng)目全部代碼地址:Github-Mybatis Mybatis 解決 jdbc 編程的問題 1、 數(shù)據(jù)庫(kù)鏈接創(chuàng)建、釋放頻繁造成系統(tǒng)資源浪費(fèi)從而影響系統(tǒng)性能,如果使用...
閱讀 3872·2021-09-27 13:35
閱讀 1069·2021-09-24 09:48
閱讀 2899·2021-09-22 15:42
閱讀 2339·2021-09-22 15:28
閱讀 3145·2019-08-30 15:43
閱讀 2609·2019-08-30 13:52
閱讀 2971·2019-08-29 12:48
閱讀 1451·2019-08-26 13:55