Java之如何正確地對包裝類進行裝箱與拆箱
配套開源項目資料
Github:
Gitee:
一. 裝箱
1. 概念
所謂的裝箱(Boxing),其實就是將基本類型轉換成包裝類,例如把double變成Double。裝箱分為手動裝箱和自動裝箱(Auto Boxing),如果我們手動實例化一個包裝類,這就是手動裝箱。在JDK 1.5之前,必須進行手動裝箱;JDK 1.5之后,可以進行自動裝箱,不用再進行手工操作,這就簡化了開發(fā),提供了方便。
2. 案例
下面的案例是手動裝箱和自動裝箱的實現(xiàn)過程。在JDK 1.5前后,裝箱有手動裝箱和自動裝箱之分,大家要注意。
public class BoxTest {
public static void main(String[] args) {
//JDK 1.5之前的拆裝箱過程--手動拆裝箱
byte b = 10;
//手動裝箱
Byte b1 = Byte.valueOf(b);
System.out.println("手動裝箱后的結果,b1="+b1);
//手動裝箱的另一種形式
int m = 100;
Integer obj = new Integer(m);
//手動拆箱的另一種形式
int n = obj.intValue();
System.out.println("n = " + n);
//JDK 1.5之后的拆裝箱過程--自動拆裝箱
int i = 10;
//自動裝箱
Integer i001 = i;
System.out.println("自動裝箱后的結果,i001="+i001);
}
}二. 拆箱
1. 概念
所謂的拆箱(Unboxing),其實就是將包裝類型轉換成基本類型,例如把Double變成double。同樣的,拆箱也分為手動拆箱和自動拆箱(Auto Boxing),手動實例化操作包裝類,就是手動拆箱。在JDK 1.5之前必須手動進行拆箱,JDK 1.5之后就可以自動拆箱了。
2. 案例
下面的案例是手動拆箱和自動拆箱的實現(xiàn)過程。在JDK 1.5前后,拆箱有手動拆箱和自動拆箱之分,大家要注意。
public class BoxTest {
public static void main(String[] args) {
//JDK 1.5之前的拆裝箱過程--手動拆裝箱
byte b = 10;
//手動裝箱
Byte b1 = Byte.valueOf(b);
System.out.println("手動裝箱后的結果,b1="+b1);
//手動拆箱
byte b2 = b1.byteValue();
System.out.println("手動拆箱后的結果="+b2);
//JDK 1.5之后的拆裝箱過程--自動拆裝箱
int i = 10;
//自動裝箱
Integer i001 = i;
System.out.println("自動裝箱后的結果,i001="+i001);
//自動拆箱
int i002 = i001;
System.out.println("自動拆箱后的結果,i002="+i002);
}
}3. 小結
我們要注意,自動裝箱和自動拆箱只發(fā)生在編譯階段,其目的是為了減少代碼的編寫。從性能上來看,裝箱和拆箱的過程會影響代碼的執(zhí)行效率,因為編譯后的class代碼是嚴格區(qū)分基本類型和引用類型的,所以編譯階段的裝箱和拆箱,在編譯后還是要回歸原始。另外在自動拆箱時,如果賦值不當,有可能會產(chǎn)生NullPointerException異常,如下所示:
Integer n = null; //這里就會產(chǎn)生NPE空指針異常 int m = n;
三. 結語
至此,壹哥就把Java中的常用包裝類給大家介紹完畢了,現(xiàn)在你知道包裝類和基本類型有什么聯(lián)系和區(qū)別了嗎?本文重點總結如下:
- 將基本類型變成包裝類就是裝箱,把包裝類變成基本類型就是拆箱;
- 裝箱和拆箱都分為手動和自動兩種情況;
- 自動裝箱和自動拆箱都是在編譯期完成的(JDK 1.5之后出現(xiàn)自動拆裝箱);
- 裝箱和拆箱會影響執(zhí)行效率,且拆箱時可能發(fā)生 NullPointerException異常 ;
以上就是Java之如何正確地對包裝類進行裝箱與拆箱的詳細內(nèi)容,更多關于Java包裝類裝箱拆箱的資料請關注腳本之家其它相關文章!
相關文章
Curator實現(xiàn)zookeeper的節(jié)點監(jiān)聽詳解
這篇文章主要介紹了Curator實現(xiàn)zookeeper的節(jié)點監(jiān)聽詳解,Curtor框架中一共有三個實現(xiàn)監(jiān)聽的方式,一種是NodeCache監(jiān)聽指定節(jié)點,一種是pathChildrenCache監(jiān)聽子節(jié)點,一種是TreeCache可以監(jiān)控所有節(jié)點 相當于以上兩種的合集,需要的朋友可以參考下2023-12-12
解決mapper.xml中resultType映射類型的問題
這篇文章主要介紹了解決mapper.xml中resultType映射類型的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-06-06
SpringBoot整合WebSocket實現(xiàn)實時通信功能
在當今互聯(lián)網(wǎng)時代,實時通信已經(jīng)成為了許多應用程序的基本需求,而WebSocket作為一種全雙工通信協(xié)議,為開發(fā)者提供了一種簡單、高效的實時通信解決方案,本文將介紹如何使用SpringBoot框架來實現(xiàn)WebSocket的集成,快速搭建實時通信功能,感興趣的朋友可以參考下2023-11-11

