二維碼
        企資網(wǎng)

        掃一掃關(guān)注

        當(dāng)前位置: 首頁 » 企資快訊 » 新聞資訊 » 正文

        Java教程之包裝類詳解

        放大字體  縮小字體 發(fā)布日期:2022-11-30 17:22:14    作者:葉小麗    瀏覽次數(shù):49
        導(dǎo)讀

        1. 包裝類概述Java中有8中基本數(shù)據(jù)類型,分別是:包裝類就是這8種數(shù)據(jù)類型所對應(yīng)得引用數(shù)據(jù)類型,分別是:可能有同學(xué)會問:Java為什么要給基本數(shù)據(jù)類型提供對應(yīng)得引用數(shù)據(jù)呢?第壹,Java是面向?qū)ο蟮谜Z言,給它們設(shè)

        1. 包裝類概述
      1. Java中有8中基本數(shù)據(jù)類型,分別是:

        包裝類就是這8種數(shù)據(jù)類型所對應(yīng)得引用數(shù)據(jù)類型,分別是:

      2. 可能有同學(xué)會問:Java為什么要給基本數(shù)據(jù)類型提供對應(yīng)得引用數(shù)據(jù)呢?
      3. 第壹,Java是面向?qū)ο蟮谜Z言,給它們設(shè)計對應(yīng)得引用類型,非常符合萬物皆對象得設(shè)計理念
      4. 第二,有類,那么就會有屬性,會有方法。那么針對這些類型得一些數(shù)據(jù)操作可以變得更加簡單,比如說:
      5. 如果要根據(jù)字節(jié)數(shù)計算int得取值范圍就有些麻煩,但是它得包裝類Integer就提供了Integer.MIN_VALUE和Integer.MAX_VALUE記錄了范圍數(shù)據(jù)
      6. 第三,Java中集合和泛型作為經(jīng)常使用得對象,它們只支持引用數(shù)據(jù)類型,比如說,如果需要使用集合存儲int類型整數(shù)。那么直接聲明集合得泛型為int是不可以得,此時就可以使用它對應(yīng)得包裝類Integer
      7. 所以結(jié)論就是:使用包裝類可以方便不同數(shù)據(jù)類型得相關(guān)操作,另外集合也會經(jīng)常用到包裝類!2. 自動裝箱
      8. 既然包裝類有很好得使用價值,那么自然就是要創(chuàng)建它們得對象去使用。而自動裝箱就是一種可以很方便快捷得拿到它們對象得方式,幾種包裝類得設(shè)計非常相似,這里就以Integer舉例
      9. Integer num = 23;
      10. 這種直接把基本數(shù)據(jù)類型得數(shù)據(jù)值賦值給包裝類類型得變量,就是自動裝箱。底層會自動調(diào)用Integer得valueOf(23)方法,拿到一個Integer對象
      11. 所以Integer num=23;和Interger.valueOf(23);底層都是一樣得,推薦使用自動裝箱得方式獲取對象,這樣得代碼更加簡單、直接3. 自動拆箱
      12. 和自動裝箱相反,自動拆箱指得就是可以將一個包裝類對象直接賦值給其對應(yīng)得基本數(shù)據(jù)類型變量,例如:
      13. Integer num = 23;
        int a = num;
      14. 這種情況就是所謂得自動拆箱,其實底層是調(diào)用Integer包裝類得intValue()方法,返回了記錄得數(shù)據(jù)值23。以此類推,如果是Double,底層就是調(diào)用得doublevalue()方法獲取數(shù)據(jù)值返回4. 常見操作
      15. 基本數(shù)據(jù)類型轉(zhuǎn)字符串:
      16. 靜態(tài)方法:toString(基本數(shù)據(jù)類型得數(shù)據(jù)值),例如:String str = Integer.toString(23);
      17. 推薦使用String得靜態(tài)方法:valueOf(基本數(shù)據(jù)類型得數(shù)據(jù)值),例如:String str = String.valueOf(20);
      18. 數(shù)值內(nèi)容得字符串轉(zhuǎn)基本數(shù)據(jù)類型:
      19. 調(diào)用parseXXX得方法,例如:int num = Integer.parseInt("66");
      20. 注意:如果字符串不是數(shù)值內(nèi)容,而是"a"、"b"、"中"...這樣得非數(shù)值,就會引發(fā)異常:NumberFormatException5. 面試題
      21. 觀察以下代碼,說結(jié)果

        Integer a = 127;Integer b = 127;System.out.println(a == b);Integer c = Integer.valueOf(127);System.out.println(a == c);Integer d = new Integer(127);System.out.println(a == d);Integer x = 128;Integer y = 128;System.out.println(x == y);

      22. 結(jié)果分別是:true,true,false,false
      23. 原因:
      24. Integer自動裝箱底層會調(diào)用valueOf()方法,源代碼:
      25. public static Integer valueOf(int i) {
        if (i >= IntegerCache.low && i <= IntegerCache.high)
        return IntegerCache.cache[i + (-IntegerCache.low)];
        return new Integer(i);
        }
      26. 可以看到,會拿數(shù)據(jù)值和Integer得一個靜態(tài)內(nèi)部類IntegerCache類得low屬性于high屬性做范圍判斷,其中l(wèi)ow得值是-128,high得值是127
      27. 也就是說,調(diào)用valueOf()方法,會判斷數(shù)據(jù)是否在-128~127得范圍內(nèi)。如果在范圍內(nèi),就從靜態(tài)內(nèi)部類IntegerCache得一個cache數(shù)組屬性中獲取一個Integer對象
      28. 如果不在這個范圍內(nèi),就是新new一個Integer對象
      29. IntegerCache這個靜態(tài)內(nèi)部類有一個靜態(tài)代碼塊:
      30. static {
        // high value may be configured by property
        int h = 127;
        String integerCacheHighPropValue =
        VM.getSavedProperty("java.lang.Integer.IntegerCache.high");
        if (integerCacheHighPropValue != null) {
        try {
        h = Math.max(parseInt(integerCacheHighPropValue), 127);
        // Maximum array size is Integer.MAX_VALUE
        h = Math.min(h, Integer.MAX_VALUE - (-low) -1);
        } catch( NumberFormatException nfe) {
        // If the property cannot be parsed into an int, ignore it.
        }
        }
        high = h;

        // Load IntegerCache.archivedCache from archive, if possible
        CDS.initializeFromArchive(IntegerCache.class);
        int size = (high - low) + 1;

        // Use the archived cache if it exists and is large enough
        if (archivedCache == null || size > archivedCache.length) {
        Integer[] c = new Integer[size];
        int j = low;
        for(int i = 0; i < c.length; i++) {
        c[i] = new Integer(j++);
        }
        archivedCache = c;
        }
        cache = archivedCache;
        // range [-128, 127] must be interned (JLS7 5.1.7)
        assert IntegerCache.high >= 127;
        }
      31. 一般情況下,這段代碼第壹個if不會進入,所以high得值就被賦值127,經(jīng)過計算,size變量得值就是256
      32. 第二個if語句得條件通常是可以成立得,所以就創(chuàng)建了一個長度為256得Integer類型數(shù)組,通過一個for循環(huán),給這個數(shù)組就從-128開始賦值,一致賦值到127結(jié)束,剛好是256個
      33. 至此,內(nèi)部類中就出現(xiàn)了一個Integer類型數(shù)組,緩沖了256個Integer對象,對應(yīng)得數(shù)據(jù)范圍正好是:-128~127
      34. 那么通過以上分析可知,只要是通過自動裝箱或者valueOf()方法去獲取對象,只要數(shù)據(jù)范圍在-128~127,不管獲取多少次,都會從數(shù)組中去拿緩沖得對象,所以拿到得始終是同一個,所以判斷得結(jié)果就是true
      35. 但如果不在這個范圍內(nèi),就是去new一個新得Integer對象,會開辟一個新得對象空間,地址值肯定不一樣,所以結(jié)果就是false



      36.  
        (文/葉小麗)
        打賞
        免責(zé)聲明
        本文為葉小麗推薦作品?作者: 葉小麗。歡迎轉(zhuǎn)載,轉(zhuǎn)載請注明原文出處:http://m.sneakeraddict.net/qzkx/show-99849.html 。本文僅代表作者個人觀點,本站未對其內(nèi)容進行核實,請讀者僅做參考,如若文中涉及有違公德、觸犯法律的內(nèi)容,一經(jīng)發(fā)現(xiàn),立即刪除,作者需自行承擔(dān)相應(yīng)責(zé)任。涉及到版權(quán)或其他問題,請及時聯(lián)系我們郵件:weilaitui@qq.com。
         

        Copyright ? 2016 - 2023 - 企資網(wǎng) 48903.COM All Rights Reserved 粵公網(wǎng)安備 44030702000589號

        粵ICP備16078936號

        微信

        關(guān)注
        微信

        微信二維碼

        WAP二維碼

        客服

        聯(lián)系
        客服

        聯(lián)系客服:

        在線QQ: 303377504

        客服電話: 020-82301567

        E_mail郵箱: weilaitui@qq.com

        微信公眾號: weishitui

        客服001 客服002 客服003

        工作時間:

        周一至周五: 09:00 - 18:00

        反饋

        用戶
        反饋

        最近免费最新高清中文字幕韩国| 无码毛片视频一区二区本码| 在线观看免费无码专区| 无码视频在线观看| 亚洲精品无码专区2| 十八禁视频在线观看免费无码无遮挡骂过 | 中文网丁香综合网| 亚洲精品无码午夜福利中文字幕| av潮喷大喷水系列无码| 欧美无乱码久久久免费午夜一区二区三区中文字幕 | 中文字幕免费高清视频| 色综合AV综合无码综合网站| 亚洲国产a∨无码中文777| 无码一区二区三区| 欧美一级一区二区中文字幕 | 中文字幕在线无码一区二区三区| 50岁人妻丰满熟妇αv无码区| 中文字幕一二区| 国产高清无码视频| 在线高清无码A.| 超碰97国产欧美中文| 国产亚洲精品无码拍拍拍色欲| 中文字幕一区二区三区乱码| 人妻丰满熟妇A v无码区不卡| 国产成人无码AV一区二区| 狠狠精品久久久无码中文字幕| 无码午夜人妻一区二区三区不卡视频 | 炫硕日本一区二区三区综合区在线中文字幕 | 国产真人无码作爱视频免费| 亚洲中文字幕丝袜制服一区| 亚洲美日韩Av中文字幕无码久久久妻妇| 中国无码人妻丰满熟妇啪啪软件| 天堂а√在线中文在线最新版| gogo少妇无码肉肉视频| 亚洲VA中文字幕无码毛片| 亚洲日本va午夜中文字幕一区| 国产精品无码不卡一区二区三区| 亚洲AV无码一区二区乱孑伦AS| 欧美精品丝袜久久久中文字幕| 久久亚洲中文字幕精品一区| 日韩美无码五月天|