您好,登錄后才能下訂單哦!
這篇文章給大家分享的是有關JAVA如何包裝類、自動拆箱和裝箱的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。
眾所周知,JAVA是一門面向對象的編程語言,但是它真的就是完全的面向對象的嗎?其實不然,在JAVA中有部分知識不是面向對象的,那就是我們經常使用的基本數據類型!
為什么需要有包裝類這個東西呢?其實原因很簡單,我們有時候是需要將一些基本數據類型當做一個對象來處理的,比如我們需要在list中添加一些基本數據類型的時候,我們直接通過list.add(100)來進行添加,這個時候其實就已經將基本數據類型轉換成對象了。
那么包裝類和基本數據類型的對應關系是怎樣的?看下面↓
首先包裝類是位于java.lang包當中,那么這些包裝類到底有什么用?
? 提供:字符串、基本類型數據、對象之間互相轉化的方式
? 包含每種基本數據類型的相關屬性如最大值、最小值等
其實包裝類當中的每個類中的方法都是類似的,我這里就以Integer這個類來做說明:
首先我們還是來看一看Integer這個類的源代碼:
可以看到Integer繼承于Number
看一下注釋里面的解釋,其實翻譯過來就是將一個值包裹成一個類。
好了,我們非常簡單粗暴的看了一下Integer的源代碼,接下來我們實際操作一下吧!
例如下面這一句,這一行代碼就是將“100”這個數包裝成一個對象
Integer i = new Integer(100);
其實這句代碼也可以這樣寫:
int t =100;Integer i = new Integer(t);
其實就是將一個int基本數據類型包裝成一個對象。
接下來,我們再來看一個方法 Integer.parseInt()
Integer in = Integer.parseInt("123456");
這個方法就是將一個String類型轉化成一個int類型,非常實用的一個方法!
既然能把String類型轉化成一個int類型,那么肯定也可以把int類型轉化成一個String類型!
int t =100;String tstr = Integer.toString(t);
但是,其實有個非常簡單的方法也是可以將一個int類型轉化成一個String類型。
String t1 = 234+"";
由于篇幅原因,我就只展示部分Integer中的方法,我建議大家可以去查看一下包裝類中每個類的源代碼,里面還有很多的方法,大家也可以去一一實現。
相信大家初次看到這兩個詞還是一臉懵逼,裝箱?拆箱?其實非常的簡單粗暴的。那么到底何為自動裝箱?自動裝箱就是基本類型自動地封裝到與它相同類型的包裝中,例如:
Integer tt = 100;
上面的代碼就是自動裝箱,從Java SE5開始就提供了自動裝箱的特性,這個過程中會自動根據數值創建對應的 Integer對象,這就是裝箱。
其實這行代碼的背后還是有點故事的,它實際的代碼是:
Integer tt = new Integer(100);
了解了一下自動裝箱,那么自動拆箱是什么呢?顧名思義,跟裝箱對應,就是自動將包裝類轉化成基本數據類型。
Integer tt = 100; //裝箱 int ttint = tt; //拆箱
其實編譯器暗地里幫我們做了一些事:
new Integer(100).intValue();
它調用了Integer對象里的intValue()方法,為什么這么說呢?我們看一下測試代碼:
Integer tt = null;//定義一個空對象int ttint = tt;System.out.println(ttint);
運行結果:
Exception in thread "main" java.lang.NullPointerExceptionat demo1.main(demo1.java:9)
可以看到是報錯的,為啥呢?因為我們把tt定義為了null,也就是說這是個空對象(也就是不存在這個對象),但是我們卻使用了int ttint =tt,因為當我們寫這行代碼時,它就會去調用Integer中的方法,但是我們其實并沒有真正創建這個對象,所以就報了空指針的錯。
通過上面的一些代碼,大家可能對裝箱和拆箱有一定的了解了,其實從底層來看,在裝箱的時候自動調用的是Integer的valueOf(int)方法。而在拆箱的時候自動調用的是Integer的intValue方法。這些方法我們都可以從源代碼中查到。大家都可以去動手看一看!
我們繼續深入一下包裝類,看下面的代碼:
Integer tt1 = 1234;Integer tt2 = 1234;System.out.println(tt1==tt2);System.out.println(tt1.equals(tt2));
看一下輸出結果:
falsetrue
一切表示很正常,但是不急!我們繼續看下面:
Integer tt1 = 123; //改為123了Integer tt2 = 123;System.out.println(tt1==tt2);System.out.println(tt1.equals(tt2));
輸出結果:
truetrue
為啥它就是true呢?我不是創建了兩個對象了嗎?應該是false啊?其實[-128-127]之間的數,仍然是當做基本數據類型處理的。為什么呢?其實是因為基本數據類型比對象快,jdk開發人員就是這樣寫的,我們也沒辦法。 大家把這個記住就行了!
感謝各位的閱讀!關于“JAVA如何包裝類、自動拆箱和裝箱”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。