java裝箱和拆箱的區(qū)別

  • 裝箱就是自動將基本數(shù)據(jù)類型轉(zhuǎn)換為包裝器類型(int-->Integer)讥珍;調(diào)用方法:Integer的valueOf(int) 方法。
  • 拆箱就是自動將包裝器類型轉(zhuǎn)換為基本數(shù)據(jù)類型(Integer-->int)偿曙;調(diào)用方法:Integer的intValue方法围小。

自動裝箱和拆箱發(fā)生在編譯器

Integer x = 2;     // 裝箱 調(diào)用了 Integer.valueOf(2)
int y = x;         // 拆箱 調(diào)用了 X.intValue()

面試題01:以下代碼會輸出什么们豌?

public void Test01(){
        Integer i1 = 100;
        Integer i2 = 100;

        Integer i3 = 200;
        Integer i4 = 200;

        System.out.println(i1 == i2);
        System.out.println(i3 == i4);

    }

結(jié)果:

true
false

原因:看一下源碼

public static Integer valueOf(int i) {
        if (i >= IntegerCache.low && i <= IntegerCache.high)
            return IntegerCache.cache[i + (-IntegerCache.low)];
        return new Integer(i);
    }

IntegerCache類的實(shí)現(xiàn)為

private static class IntegerCache {
        static final int low = -128;
        static final int high;
        static final Integer cache[];

        static {
            // high value may be configured by property
            int h = 127;
            String integerCacheHighPropValue =
                sun.misc.VM.getSavedProperty("java.lang.Integer.IntegerCache.high");
            if (integerCacheHighPropValue != null) {
                try {
                    int i = parseInt(integerCacheHighPropValue);
                    i = Math.max(i, 127);
                    // Maximum array size is Integer.MAX_VALUE
                    h = Math.min(i, Integer.MAX_VALUE - (-low) -1);
                } catch( NumberFormatException nfe) {
                    // If the property cannot be parsed into an int, ignore it.
                }
            }
            high = h;

            cache = new Integer[(high - low) + 1];
            int j = low;
            for(int k = 0; k < cache.length; k++)
                cache[k] = new Integer(j++);

            // range [-128, 127] must be interned (JLS7 5.1.7)
            assert IntegerCache.high >= 127;
        }

        private IntegerCache() {}
    }

代碼可以看出,在通過valueOf方法創(chuàng)建Integer對象的時候记罚,如果數(shù)值在[-128,127]之間墅诡,便返回指向IntegerCache.cache中已經(jīng)存在的對象的引用;否則創(chuàng)建一個新的Integer對象毫胜。

上面代碼中i1和i2的數(shù)值為100书斜,因此會直接從cache中取已經(jīng)存在的對象,所以i1和i2指向的是同一個對象酵使,而i3和i4則分別指向不同的對象荐吉。

面試題01:以下代碼會輸出什么?

 public void test02(){
        Double d1 = 100.0;
        Double d2 = 100.0;

        Double d3 = 100.0;
        Double d4 = 100.0;

        System.out.println(d1 == d2);
        System.out.println(d3 == d4);
    }

結(jié)果:

false
false

原因:在某個范圍內(nèi)的整型數(shù)值的個數(shù)是有限的口渔,而浮點(diǎn)數(shù)卻不是样屠。

基本類型對應(yīng)的緩沖池如下:

  • boolean values true and false
  • all byte values
  • short values between128 and 127
  • int values between -128 and 127
  • char in the range \u0000 to \u007F

面試題03 new Integer(123) 與 Integer.valueOf(123) 的區(qū)別在于:

  • new Integer(123) 每次都會新建一個對象;
  • Integer.valueOf(123) 會使用緩存池中的對象缺脉,多次調(diào)用會取得同一個對象的引用痪欲。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市攻礼,隨后出現(xiàn)的幾起案子业踢,更是在濱河造成了極大的恐慌,老刑警劉巖礁扮,帶你破解...
    沈念sama閱讀 218,284評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件知举,死亡現(xiàn)場離奇詭異,居然都是意外死亡太伊,警方通過查閱死者的電腦和手機(jī)雇锡,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,115評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來僚焦,“玉大人锰提,你說我怎么就攤上這事》急” “怎么了立肘?”我有些...
    開封第一講書人閱讀 164,614評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長名扛。 經(jīng)常有香客問我赛不,道長,這世上最難降的妖魔是什么罢洲? 我笑而不...
    開封第一講書人閱讀 58,671評論 1 293
  • 正文 為了忘掉前任踢故,我火速辦了婚禮文黎,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘殿较。我一直安慰自己耸峭,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,699評論 6 392
  • 文/花漫 我一把揭開白布淋纲。 她就那樣靜靜地躺著劳闹,像睡著了一般。 火紅的嫁衣襯著肌膚如雪洽瞬。 梳的紋絲不亂的頭發(fā)上本涕,一...
    開封第一講書人閱讀 51,562評論 1 305
  • 那天,我揣著相機(jī)與錄音伙窃,去河邊找鬼菩颖。 笑死,一個胖子當(dāng)著我的面吹牛为障,可吹牛的內(nèi)容都是我干的晦闰。 我是一名探鬼主播,決...
    沈念sama閱讀 40,309評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼鳍怨,長吁一口氣:“原來是場噩夢啊……” “哼呻右!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起鞋喇,我...
    開封第一講書人閱讀 39,223評論 0 276
  • 序言:老撾萬榮一對情侶失蹤声滥,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后侦香,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體醒串,經(jīng)...
    沈念sama閱讀 45,668評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,859評論 3 336
  • 正文 我和宋清朗相戀三年鄙皇,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片仰挣。...
    茶點(diǎn)故事閱讀 39,981評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡伴逸,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出膘壶,到底是詐尸還是另有隱情错蝴,我是刑警寧澤,帶...
    沈念sama閱讀 35,705評論 5 347
  • 正文 年R本政府宣布颓芭,位于F島的核電站顷锰,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏亡问。R本人自食惡果不足惜官紫,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,310評論 3 330
  • 文/蒙蒙 一肛宋、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧束世,春花似錦酝陈、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,904評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至贫堰,卻和暖如春穆壕,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背其屏。 一陣腳步聲響...
    開封第一講書人閱讀 33,023評論 1 270
  • 我被黑心中介騙來泰國打工喇勋, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人漫玄。 一個月前我還...
    沈念sama閱讀 48,146評論 3 370
  • 正文 我出身青樓茄蚯,卻偏偏與公主長得像,于是被迫代替她去往敵國和親睦优。 傳聞我的和親對象是個殘疾皇子渗常,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,933評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 概述 JAVA中的自動裝箱指的是把基本類型的值轉(zhuǎn)換為對應(yīng)的包裝類對象,自動拆箱則相反汗盘。 JAVA中的基本類型: b...
    馬月半閱讀 372評論 0 0
  • 一段代碼引發(fā)的問題 最近在學(xué)習(xí)一本關(guān)于java虛擬機(jī)的書皱碘,其中有一段關(guān)于自動裝箱陷阱的示例代碼如下: 作者并沒有給...
    千雨茶閱讀 553評論 2 1
  • 一癌椿、什么是裝箱?什么是拆箱菱阵? Java為每種基本數(shù)據(jù)類型都提供了對應(yīng)的包裝器類型踢俄,至于為什么會為每種基本數(shù)據(jù)類型提...
    Minority閱讀 288評論 0 1
  • 1、 什么是包裝類 包裝類就是Java基本數(shù)據(jù)類型的對象表示形式晴及。其中包括基本數(shù)據(jù)類型byte, char, sh...
    otmoc閱讀 439評論 0 0
  • 目錄介紹 1.0.0.1 請手寫equal方法都办,講講具體的原理? 1.0.0.2 請說下String與String...
    楊充211閱讀 443評論 0 1