亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > Java > 正文

java中Integer包裝類裝箱的一個細節詳解

2024-07-14 08:41:53
字體:
來源:轉載
供稿:網友

前言

java有八個基本數據類型,每個都有對應的一個包裝類,比如int對應的Integer。 Integer 是int的包裝類型,數據類型是類,初值為null,從jdk1.5開始,java引入了自動拆裝箱,可以直接進行形如Integer i = 20形式的賦值,編譯器會自動將其轉換為Integer i = Integer.valueOf(20)進行裝箱,拆箱則是將int j = i的形式轉換成了int j = i.intValue() 。

裝箱有個細節,如果不注意很容易出錯,來看一下:

Integer i = 20;Integer j = Integer.valueOf(20);System.out.println(i == j);

上面的代碼輸出為

true

好像沒什么問題,那我們形式不變,將數字20換成200,即

i = 200;j = Integer.valueOf(200);System.out.println(i == j);

同樣的判斷,輸出變成了:

false

這是為什么呢?

先明確一點,經過編譯器編譯后,Integer i = 20轉換成了Integer i = Integer.valueOf(20) ,和Integer j = Integer.valueOf(20)的定義完全一樣,那為什么將20換成了200后判斷結果不一樣了呢?

我們來看看Integer.valueOf(int 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); }

可以看出當i在某個區間內時,直接返回了緩存數組IntegerCache.cache中的一個值,超出區間才new一個新的Integer對象。到這里我們大概就可以得出結論:20在緩存范圍內所以直接用了緩存,但是200超出了緩存區間所以new了新對象,和原來對象的地址當然不會相同,所以返回false

再來看看IntegerCache,這是一個Integer的私有靜態內部類,定義如下:

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) {    int i = parseInt(integerCacheHighPropValue);    i = Math.max(i, 127);    // Maximum array size is Integer.MAX_VALUE    h = Math.min(i, Integer.MAX_VALUE - (-low));   }   high = h;   cache = new Integer[(high - low) + 1];   int j = low;   for(int k = 0; k < cache.length; k++)    cache[k] = new Integer(j++);  }  private IntegerCache() {} }

可以看出默認的緩存區間是-128~127,那么什么情況下會修改這個范圍呢,修改了某個虛擬機參數的時候,通過代碼也可看出,設置的這個緩存上限java.lang.Integer.IntegerCache.high值不能小于127,小于的話就會被賦予127,從而失效。
那么這個值怎么設置呢?我們來看看jdk源碼中怎么解釋IntegerCache這個靜態內部類:

Cache to support the object identity semantics of autoboxing for values between -128 and 127 (inclusive) as required by JLS. The cache is initialized on first usage. The size of the cache may be controlled by the -XX:AutoBoxCacheMax= option. During VM initialization, java.lang.Integer.IntegerCache.high property may be set and saved in the private system properties in the sun.misc.VM class.

大概意思是:

將-128到127(包含)的數字做緩存以供自動裝箱使用。緩存在第一次使用時被初始化。大小可以由JVM參數-xx:autoboxcachemax=option來指定。JVM初始化時此值被設置成java.lang.Integer.IntegerCache.high屬性并作為私有的系統屬性保存在sun.misc.vm.class中。

可以得到結論:這個緩存的high值是由JVM參數 -XX:AutoBoxCacheMax= option來指定的。

上述jdk源碼來源于jdk1.7,不同版本實現略有不同,但思路一致。

這種共享常用對象的思路有一個名字,叫享元模式,英文名叫Flyweight,即共享的輕量級元素。其他包裝類如Boolean、Byte、Short、Long、Charactor都有類似的實現。

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對VeVb武林網的支持。


注:相關教程知識閱讀請移步到JAVA教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美午夜片在线免费观看| 精品性高朝久久久久久久| 亚洲色图35p| 欧洲s码亚洲m码精品一区| 中文精品99久久国产香蕉| 91黑丝在线观看| 狠狠久久五月精品中文字幕| 亚洲综合在线做性| 精品国产一区二区三区久久久狼| 亚洲精品久久久久久下一站| 91国内精品久久| 欧美在线免费看| 欧美乱大交xxxxx| 中文字幕免费精品一区| 亚洲欧洲国产精品| 成人中文字幕在线观看| 国产69久久精品成人看| 亚洲影院色在线观看免费| 成人免费大片黄在线播放| 色琪琪综合男人的天堂aⅴ视频| 久久免费国产精品1| 欧美日韩国产精品一区二区三区四区| 成人av.网址在线网站| 久久亚洲国产精品成人av秋霞| 国产精品视频在线播放| 日韩精品欧美国产精品忘忧草| 国产精品一久久香蕉国产线看观看| 国产国产精品人在线视| 青青久久av北条麻妃黑人| 国产欧美日韩精品在线观看| 成人在线视频福利| 欧美激情网友自拍| 日韩国产精品亚洲а∨天堂免| 欧美亚洲国产精品| 欧美裸体xxxx极品少妇| 欧美大学生性色视频| 久久久久久亚洲精品中文字幕| 国产亚洲人成网站在线观看| 欧美成人精品在线观看| 国产一区二区三区丝袜| 欧美与欧洲交xxxx免费观看| 国产精品久久久久久久久影视| 美女少妇精品视频| 亚洲www在线| 国产一区二区av| 96pao国产成视频永久免费| 久久久99免费视频| 亚洲欧美一区二区三区久久| 中文字幕日韩av综合精品| 91久久久久久久久久久| 欧美成人免费全部| 国产精品h片在线播放| 最近更新的2019中文字幕| 91九色蝌蚪国产| 日韩在线精品视频| 亚洲欧美综合区自拍另类| 久久久久久综合网天天| 欧美黑人xxxx| 一道本无吗dⅴd在线播放一区| 高清一区二区三区日本久| 欧美精品激情blacked18| 国产精品av免费在线观看| 欧美成人午夜影院| www.久久久久| 国产精品第七影院| 日韩性生活视频| 久久这里有精品| 国产91在线高潮白浆在线观看| 亚洲国产美女精品久久久久∴| 日韩免费在线电影| 66m—66摸成人免费视频| 国产日韩av在线播放| 日韩中文字幕在线视频| 亚洲精品美女在线观看| 亚洲国产成人91精品| 91精品国产高清久久久久久久久| 国产精品丝袜久久久久久不卡| 在线电影欧美日韩一区二区私密| 色婷婷综合久久久久中文字幕1| 欧美日在线观看| 久久久久久久久爱| 国产日韩欧美在线观看| 日韩欧美中文免费| 久久婷婷国产麻豆91天堂| 欧美日韩国产精品一区二区不卡中文| 亚洲专区国产精品| 91极品视频在线| 中文字幕亚洲无线码a| 久久视频精品在线| 欧美成人免费观看| 最近免费中文字幕视频2019| 久久天堂电影网| 久久成年人免费电影| 国产主播欧美精品| 亚洲剧情一区二区| 日韩视频免费看| 欧美国产视频日韩| 日本一区二区不卡| 中文字幕欧美亚洲| 国产精品国产福利国产秒拍| 亚洲国产欧美精品| 欧美午夜视频一区二区| 国内免费久久久久久久久久久| 国产精品久久久久久久久久久久久| 国产精品大陆在线观看| 97精品国产97久久久久久| 91av视频在线免费观看| 中文字幕综合在线| 亚洲精品国产拍免费91在线| 韩国欧美亚洲国产| 中文字幕精品久久久久| 国产成人精品视频在线观看| 久久精品99国产精品酒店日本| 亚洲热线99精品视频| 国产成人精品电影久久久| 一本色道久久88精品综合| 日韩av在线天堂网| xvideos亚洲| 国产精品av网站| 91老司机在线| 91视频免费网站| 91精品国产免费久久久久久| 美女精品久久久| 亚洲影视九九影院在线观看| 日韩av男人的天堂| 欧美福利视频网站| 亚洲www永久成人夜色| 亚洲三级黄色在线观看| 最近2019免费中文字幕视频三| 久久久av一区| 欧美日韩另类在线| 精品中文字幕在线观看| 91精品国产91久久久久久不卡| 最新日韩中文字幕| 欧美精品免费在线观看| 欧美激情亚洲视频| 亚洲精品一区二区久| 97国产成人精品视频| 亚洲伊人久久综合| 2019国产精品自在线拍国产不卡| 国产va免费精品高清在线| 国产精品久久久久久久久久三级| 日韩欧美在线播放| 精品亚洲一区二区三区在线播放| 国产亚洲精品美女久久久| 日韩视频免费中文字幕| 久久精品男人天堂| 成人欧美一区二区三区在线| 欧美一级片免费在线| 久久精品成人欧美大片| 国产亚洲欧美日韩美女| 成人精品一区二区三区电影黑人| 九九热这里只有精品免费看| 久久精品色欧美aⅴ一区二区| 色综合亚洲精品激情狠狠| 成人h片在线播放免费网站| 奇门遁甲1982国语版免费观看高清| 欧美黑人视频一区| 国产精品高清在线| 亚洲成人久久一区| 亚洲男人av在线| 亚洲一区二区三区xxx视频| 成人久久一区二区| 国产精品久久久久77777|