Java之如何正確地對(duì)包裝類進(jìn)行裝箱與拆箱
配套開源項(xiàng)目資料
Github:
Gitee:
一. 裝箱
1. 概念
所謂的裝箱(Boxing),其實(shí)就是將基本類型轉(zhuǎn)換成包裝類,例如把double變成Double。裝箱分為手動(dòng)裝箱和自動(dòng)裝箱(Auto Boxing),如果我們手動(dòng)實(shí)例化一個(gè)包裝類,這就是手動(dòng)裝箱。在JDK 1.5之前,必須進(jìn)行手動(dòng)裝箱;JDK 1.5之后,可以進(jìn)行自動(dòng)裝箱,不用再進(jìn)行手工操作,這就簡(jiǎn)化了開發(fā),提供了方便。
2. 案例
下面的案例是手動(dòng)裝箱和自動(dòng)裝箱的實(shí)現(xiàn)過(guò)程。在JDK 1.5前后,裝箱有手動(dòng)裝箱和自動(dòng)裝箱之分,大家要注意。
public class BoxTest {
public static void main(String[] args) {
//JDK 1.5之前的拆裝箱過(guò)程--手動(dòng)拆裝箱
byte b = 10;
//手動(dòng)裝箱
Byte b1 = Byte.valueOf(b);
System.out.println("手動(dòng)裝箱后的結(jié)果,b1="+b1);
//手動(dòng)裝箱的另一種形式
int m = 100;
Integer obj = new Integer(m);
//手動(dòng)拆箱的另一種形式
int n = obj.intValue();
System.out.println("n = " + n);
//JDK 1.5之后的拆裝箱過(guò)程--自動(dòng)拆裝箱
int i = 10;
//自動(dòng)裝箱
Integer i001 = i;
System.out.println("自動(dòng)裝箱后的結(jié)果,i001="+i001);
}
}二. 拆箱
1. 概念
所謂的拆箱(Unboxing),其實(shí)就是將包裝類型轉(zhuǎn)換成基本類型,例如把Double變成double。同樣的,拆箱也分為手動(dòng)拆箱和自動(dòng)拆箱(Auto Boxing),手動(dòng)實(shí)例化操作包裝類,就是手動(dòng)拆箱。在JDK 1.5之前必須手動(dòng)進(jìn)行拆箱,JDK 1.5之后就可以自動(dòng)拆箱了。
2. 案例
下面的案例是手動(dòng)拆箱和自動(dòng)拆箱的實(shí)現(xiàn)過(guò)程。在JDK 1.5前后,拆箱有手動(dòng)拆箱和自動(dòng)拆箱之分,大家要注意。
public class BoxTest {
public static void main(String[] args) {
//JDK 1.5之前的拆裝箱過(guò)程--手動(dòng)拆裝箱
byte b = 10;
//手動(dòng)裝箱
Byte b1 = Byte.valueOf(b);
System.out.println("手動(dòng)裝箱后的結(jié)果,b1="+b1);
//手動(dòng)拆箱
byte b2 = b1.byteValue();
System.out.println("手動(dòng)拆箱后的結(jié)果="+b2);
//JDK 1.5之后的拆裝箱過(guò)程--自動(dòng)拆裝箱
int i = 10;
//自動(dòng)裝箱
Integer i001 = i;
System.out.println("自動(dòng)裝箱后的結(jié)果,i001="+i001);
//自動(dòng)拆箱
int i002 = i001;
System.out.println("自動(dòng)拆箱后的結(jié)果,i002="+i002);
}
}3. 小結(jié)
我們要注意,自動(dòng)裝箱和自動(dòng)拆箱只發(fā)生在編譯階段,其目的是為了減少代碼的編寫。從性能上來(lái)看,裝箱和拆箱的過(guò)程會(huì)影響代碼的執(zhí)行效率,因?yàn)榫幾g后的class代碼是嚴(yán)格區(qū)分基本類型和引用類型的,所以編譯階段的裝箱和拆箱,在編譯后還是要回歸原始。另外在自動(dòng)拆箱時(shí),如果賦值不當(dāng),有可能會(huì)產(chǎn)生NullPointerException異常,如下所示:
Integer n = null; //這里就會(huì)產(chǎn)生NPE空指針異常 int m = n;
三. 結(jié)語(yǔ)
至此,壹哥就把Java中的常用包裝類給大家介紹完畢了,現(xiàn)在你知道包裝類和基本類型有什么聯(lián)系和區(qū)別了嗎?本文重點(diǎn)總結(jié)如下:
- 將基本類型變成包裝類就是裝箱,把包裝類變成基本類型就是拆箱;
- 裝箱和拆箱都分為手動(dòng)和自動(dòng)兩種情況;
- 自動(dòng)裝箱和自動(dòng)拆箱都是在編譯期完成的(JDK 1.5之后出現(xiàn)自動(dòng)拆裝箱);
- 裝箱和拆箱會(huì)影響執(zhí)行效率,且拆箱時(shí)可能發(fā)生 NullPointerException異常 ;
以上就是Java之如何正確地對(duì)包裝類進(jìn)行裝箱與拆箱的詳細(xì)內(nèi)容,更多關(guān)于Java包裝類裝箱拆箱的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
詳解Spring Cloud 斷路器集群監(jiān)控(Turbine)
這篇文章主要介紹了詳解Spring Cloud 斷路器集群監(jiān)控(Turbine),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-05-05
SpringSecurityOAuth2 如何自定義token信息
這篇文章主要介紹了SpringSecurityOAuth2 自定義token信息的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-06-06
Java線程池submit阻塞獲取結(jié)果的實(shí)現(xiàn)原理詳解
Java線程池中提交任務(wù)運(yùn)行,通常使用execute()方法就足夠了。那如果想要實(shí)現(xiàn)在主線程中阻塞獲取線程池任務(wù)運(yùn)行的結(jié)果,該怎么辦呢?本文就來(lái)和大家一起討論討論2022-10-10
Java數(shù)據(jù)結(jié)構(gòu)及算法實(shí)例:樸素字符匹配 Brute Force
這篇文章主要介紹了Java數(shù)據(jù)結(jié)構(gòu)及算法實(shí)例:樸素字符匹配 Brute Force,本文直接給出實(shí)例代碼,代碼中包含詳細(xì)注釋,需要的朋友可以參考下2015-06-06
JAVA中String類與StringBuffer類的區(qū)別
這篇文章主要為大家詳細(xì)介紹了JAVA中String類與StringBuffer類的區(qū)別,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-12-12
Java實(shí)現(xiàn)Excel導(dǎo)入導(dǎo)出數(shù)據(jù)庫(kù)的方法示例
這篇文章主要介紹了Java實(shí)現(xiàn)Excel導(dǎo)入導(dǎo)出數(shù)據(jù)庫(kù)的方法,結(jié)合實(shí)例形式分析了java針對(duì)Excel的讀寫及數(shù)據(jù)庫(kù)操作相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2017-08-08
Java虛擬機(jī)使用jvisualvm工具遠(yuǎn)程監(jiān)控tomcat內(nèi)存
這篇文章主要介紹了Java虛擬機(jī)使用jvisualvm工具遠(yuǎn)程監(jiān)控tomcat內(nèi)存,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-11-11
Java中將異步調(diào)用轉(zhuǎn)為同步的五種實(shí)現(xiàn)方法
本文介紹了將異步調(diào)用轉(zhuǎn)為同步阻塞模式的五種方法:wait/notify、ReentrantLock+Condition、Future、CountDownLatch和CyclicBarrier,每種方法都有其適用場(chǎng)景和核心機(jī)制,可以根據(jù)具體需求選擇合適的方法,需要的朋友可以參考下2025-02-02
Springboot整合logback多節(jié)點(diǎn)日志文件加端口號(hào)區(qū)分的操作方法
這篇文章主要介紹了Springboot整合logback多節(jié)點(diǎn)日志文件加端口號(hào)區(qū)分的操作方法,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-09-09

