JAVA如何包裝類、自動拆箱和裝箱

這篇文章給大家分享的是有關(guān)JAVA如何包裝類、自動拆箱和裝箱的內(nèi)容。小編覺得挺實(shí)用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

創(chuàng)新互聯(lián)公司專注于企業(yè)成都營銷網(wǎng)站建設(shè)、網(wǎng)站重做改版、平遠(yuǎn)網(wǎng)站定制設(shè)計、自適應(yīng)品牌網(wǎng)站建設(shè)、H5頁面制作、商城網(wǎng)站建設(shè)、集團(tuán)公司官網(wǎng)建設(shè)、外貿(mào)網(wǎng)站制作、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁設(shè)計等建站業(yè)務(wù),價格優(yōu)惠性價比高,為平遠(yuǎn)等各大城市提供網(wǎng)站開發(fā)制作服務(wù)。


包裝類是啥?          

       眾所周知,JAVA是一門面向?qū)ο蟮木幊陶Z言,但是它真的就是完全的面向?qū)ο蟮膯??其?shí)不然,在JAVA中有部分知識不是面向?qū)ο蟮?,那就是我們?jīng)常使用的基本數(shù)據(jù)類型!

      為什么需要有包裝類這個東西呢?其實(shí)原因很簡單,我們有時候是需要將一些基本數(shù)據(jù)類型當(dāng)做一個對象來處理的,比如我們需要在list中添加一些基本數(shù)據(jù)類型的時候,我們直接通過list.add(100)來進(jìn)行添加,這個時候其實(shí)就已經(jīng)將基本數(shù)據(jù)類型轉(zhuǎn)換成對象了。

      那么包裝類和基本數(shù)據(jù)類型的對應(yīng)關(guān)系是怎樣的?看下面↓

JAVA如何包裝類、自動拆箱和裝箱


如何使用包裝類呢?        

  首先包裝類是位于java.lang包當(dāng)中,那么這些包裝類到底有什么用?

        ? 提供:字符串、基本類型數(shù)據(jù)、對象之間互相轉(zhuǎn)化的方式

        ? 包含每種基本數(shù)據(jù)類型的相關(guān)屬性如最大值、最小值等

其實(shí)包裝類當(dāng)中的每個類中的方法都是類似的,我這里就以Integer這個類來做說明:

首先我們還是來看一看Integer這個類的源代碼:

JAVA如何包裝類、自動拆箱和裝箱

可以看到Integer繼承于Number

JAVA如何包裝類、自動拆箱和裝箱

看一下注釋里面的解釋,其實(shí)翻譯過來就是將一個值包裹成一個類。

好了,我們非常簡單粗暴的看了一下Integer的源代碼,接下來我們實(shí)際操作一下吧!

例如下面這一句,這一行代碼就是將“100”這個數(shù)包裝成一個對象

Integer i = new Integer(100);

其實(shí)這句代碼也可以這樣寫:

int t =100;Integer i = new Integer(t);

其實(shí)就是將一個int基本數(shù)據(jù)類型包裝成一個對象。

接下來,我們再來看一個方法   Integer.parseInt()

Integer in = Integer.parseInt("123456");

這個方法就是將一個String類型轉(zhuǎn)化成一個int類型,非常實(shí)用的一個方法!

既然能把String類型轉(zhuǎn)化成一個int類型,那么肯定也可以把int類型轉(zhuǎn)化成一個String類型!

int t =100;String tstr = Integer.toString(t);

但是,其實(shí)有個非常簡單的方法也是可以將一個int類型轉(zhuǎn)化成一個String類型。

String t1 = 234+"";

由于篇幅原因,我就只展示部分Integer中的方法,我建議大家可以去查看一下包裝類中每個類的源代碼,里面還有很多的方法,大家也可以去一一實(shí)現(xiàn)。


重頭戲:自動裝箱和拆箱 (auto boxing && boxing)        

相信大家初次看到這兩個詞還是一臉懵逼,裝箱?拆箱?其實(shí)非常的簡單粗暴的。那么到底何為自動裝箱?自動裝箱就是基本類型自動地封裝到與它相同類型的包裝中,例如:

Integer tt = 100;

上面的代碼就是自動裝箱,從Java SE5開始就提供了自動裝箱的特性,這個過程中會自動根據(jù)數(shù)值創(chuàng)建對應(yīng)的 Integer對象,這就是裝箱。

其實(shí)這行代碼的背后還是有點(diǎn)故事的,它實(shí)際的代碼是:

Integer tt = new Integer(100);

了解了一下自動裝箱,那么自動拆箱是什么呢?顧名思義,跟裝箱對應(yīng),就是自動將包裝類轉(zhuǎn)化成基本數(shù)據(jù)類型。

 Integer tt = 100; //裝箱 int ttint = tt;   //拆箱

其實(shí)編譯器暗地里幫我們做了一些事:

new Integer(100).intValue();

它調(diào)用了Integer對象里的intValue()方法,為什么這么說呢?我們看一下測試代碼:

Integer tt = null;//定義一個空對象int ttint = tt;System.out.println(ttint);

運(yùn)行結(jié)果:

Exception in thread "main" java.lang.NullPointerExceptionat demo1.main(demo1.java:9)

可以看到是報錯的,為啥呢?因為我們把tt定義為了null,也就是說這是個空對象(也就是不存在這個對象),但是我們卻使用了int ttint =tt,因為當(dāng)我們寫這行代碼時,它就會去調(diào)用Integer中的方法,但是我們其實(shí)并沒有真正創(chuàng)建這個對象,所以就報了空指針的錯。

通過上面的一些代碼,大家可能對裝箱和拆箱有一定的了解了,其實(shí)從底層來看,在裝箱的時候自動調(diào)用的是Integer的valueOf(int)方法。而在拆箱的時候自動調(diào)用的是Integer的intValue方法。這些方法我們都可以從源代碼中查到。大家都可以去動手看一看!

我們繼續(xù)深入一下包裝類,看下面的代碼:

Integer tt1 = 1234;Integer tt2 = 1234;System.out.println(tt1==tt2);System.out.println(tt1.equals(tt2));

看一下輸出結(jié)果:

falsetrue

一切表示很正常,但是不急!我們繼續(xù)看下面:

Integer tt1 = 123; //改為123了Integer tt2 = 123;System.out.println(tt1==tt2);System.out.println(tt1.equals(tt2));

輸出結(jié)果:

truetrue

為啥它就是true呢?我不是創(chuàng)建了兩個對象了嗎?應(yīng)該是false?。科鋵?shí)[-128-127]之間的數(shù),仍然是當(dāng)做基本數(shù)據(jù)類型處理的。為什么呢?其實(shí)是因為基本數(shù)據(jù)類型比對象快,jdk開發(fā)人員就是這樣寫的,我們也沒辦法。 大家把這個記住就行了!


感謝各位的閱讀!關(guān)于“JAVA如何包裝類、自動拆箱和裝箱”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,讓大家可以學(xué)到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

網(wǎng)頁標(biāo)題:JAVA如何包裝類、自動拆箱和裝箱
本文鏈接:http://bm7419.com/article20/pcspjo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供靜態(tài)網(wǎng)站、外貿(mào)建站、微信公眾號服務(wù)器托管、Google、企業(yè)建站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)頁設(shè)計公司