Java中自動(dòng)裝箱與拆箱詳解

在講裝箱與拆箱之前我們要先了解一下這個(gè)問題的來源:

Java中的類型分為基本類型(Primitive type)和類類型(Class type)兩種:

基本類型包括byte型、char型、short型、int型、long型、float型、double型、boolean型八種?;绢愋椭傅氖侵苯影档妙愋停商峁┱Z言級(jí)別的支持。

類類型包括Byte、Character、Short、Integer、Long、Float、Double、Boolean。為什么要用類類型呢?原因其實(shí)很簡單,因?yàn)镴ava是一種面向?qū)ο蟮木幊陶Z言,所以操作對(duì)象是很總要的操作 ,而要產(chǎn)生對(duì)象就必須先定義類(類是對(duì)象的抽象,對(duì)象是類的實(shí)例),類類型提供了比基本類型更多的操作。

在Java版本增加自動(dòng)裝箱與拆箱操作之前,如果要讓基本類型像對(duì)象一樣操作,就要對(duì)基本類型進(jìn)行打包處理,Long、Integer、Double、Float、Boolean等類就是所謂的打包器(Wrapper)。

如:int num=10;

 Integer wrapper=new Integer(num);    //打包基本類型;

而在Java1.5版本增加了自動(dòng)裝箱與自動(dòng)拆箱的功能,也就是說現(xiàn)在像Integer num=10;現(xiàn)在實(shí)際做的事情就是Integer num=new Integer(10);

如: Integer wrapper=10; //自動(dòng)裝箱;

          int num=wrapper;     //自動(dòng)拆箱;

知道了什么是自動(dòng)裝箱和拆箱,我們?cè)賮砜纯闯绦蚴侨绾芜M(jìn)行自動(dòng)裝箱和拆箱的。

實(shí)際上對(duì)于Integer num=10;程序會(huì)將代碼展開為:Integer num=Integer.valueOf(100);

查看JDK可知valueOf()的操作內(nèi)容:

public static Integer valueOf(int i){

       assert IntegerCache.high>=127;

           if(i>=IntegerCache.low&&i<=IntegerCache.high)

                return IntegerCache.cache[i+(-IntegerCache.low)];

        return new Integer(i);

}

簡單來說就是如果傳入的int在IntegerCache.low和IntegerCache.high之間,就看看前面的緩存中有沒有打包過相同的值,有就直接返回,沒有的話就創(chuàng)建新的Integer實(shí)例。

之所以要將這個(gè)是為了引出使用“==”和“equals()”的問題,如下面的例子

Integer i1=200;

Integer i2=200;  //200超過IntegerCache.high默認(rèn)值(127)

if(i1==i2){

   System.out.println("i1==i2");

}

else{

  System.out.println("i1!=i2");

}

編譯之后你會(huì)發(fā)現(xiàn)結(jié)果并不相等,所以別用==或!=來比較兩個(gè)對(duì)象實(shí)質(zhì)內(nèi)容值是否相等。

通過自動(dòng)裝箱與拆箱這個(gè)問題,wo體會(huì)到一方面是Java中對(duì)對(duì)象及其操作性的重要,另一方面是在學(xué)習(xí)Java的過程中要學(xué)會(huì)去看Java的一些原文檔,了解Java的實(shí)現(xiàn)原理,為的是知道Java可以用來實(shí)現(xiàn)什么和它不能做些什么。
java學(xué)習(xí)群669823128

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容