日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

由自动装箱和拆箱引发我看Integer源码

發布時間:2025/5/22 编程问答 59 豆豆
生活随笔 收集整理的這篇文章主要介紹了 由自动装箱和拆箱引发我看Integer源码 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

背景和問題

  在看別人整理的資料時,看到如下一段代碼:

package?com.sitech.test;/**
?*?自動裝箱和拆箱?jdk1.6
?*?@author?liaowp
?*?*/public?class?TestInteger?{????public?static?void?main(String[]?args)?{
????????Integer?i1?=?80,?i2?=?80,?i3?=?999,?i4?=?999;
????????System.out.println(i1?==?i2);//true
????????System.out.println(i3?==?i4);//false????}
}

  如果沒有看過源碼的同學肯定覺的答案要么是2個true要么是2個false。我剛看到這一段代碼的時候也覺的是2個true,感覺自己100%確定,不過真正運行之后才發現傻眼了,一個true一個false,這是Bug吧。其實LZ以前看過一部分Integer源碼了,但是現在想想好像看的不認真,尷尬了。于是被這個問題觸發了LZ要認真看一次Integer源碼了(我要認真了,哈哈)。

  我們還是回到上面那個問題吧,先把問題解決了在吹nb。我們可以看到上面的代碼4個變量都是Integer的引用,所以輸出的==運算比較的不是Integer值而是Integer引用。裝箱的本質是什么呢?當我們給一個Integer對象賦一個int值的時候,會調用Integer類的靜態方法valueOf,我們看一看valueOf方法就知道為什么會有這樣的結果了。

????/**
?????*?Returns?an?{@code?Integer}?instance?representing?the?specified
?????*?{@code?int}?value.??If?a?new?{@code?Integer}?instance?is?not
?????*?required,?this?method?should?generally?be?used?in?preference?to
?????*?the?constructor?{@link?#Integer(int)},?as?this?method?is?likely
?????*?to?yield?significantly?better?space?and?time?performance?by
?????*?caching?frequently?requested?values.
?????*
?????*?This?method?will?always?cache?values?in?the?range?-128?to?127,
?????*?inclusive,?and?may?cache?other?values?outside?of?this?range.
?????*
?????*?@param??i?an?{@code?int}?value.
?????*?@return?an?{@code?Integer}?instance?representing?{@code?i}.
?????*?@since??1.5?????*/
????public?static?Integer?valueOf(int?i)?{//是一個靜態方法?IntegerCache是一個內部類????????assert?IntegerCache.high?>=?127;//斷言??參考http://lavasoft.blog.51cto.com/62575/43735/????????if?(i?>=?IntegerCache.low?&&?i?<=?IntegerCache.high)//如果i大于對于IntegerCache.low()且i小于等于IntegerCache.high????????????return?IntegerCache.cache[i?+?(-IntegerCache.low)];//直接從緩存取出來????????return?new?Integer(i);//新創建一個Integer對象
????}

  從上面的代碼中我們可以看出Integer維持了一個緩存系統,如果在緩存的范圍內直接取出來就好了,雅思培訓機構如果不在的就要創建新的Integer對象。但是具體緩存范圍是什么的,我們在深入進去看看:

????/**
?????*?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=<size>?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.?????*/

????private?static?class?IntegerCache?{//靜態類哦????????static?final?int?low?=?-128;//最小值是-128????????static?final?int?high;//最高????????static?final?Integer?cache[];//緩存數組??這三個都final,不可修改的????????static?{//靜態代碼塊???靜態代碼塊會比改造方法先執行????????????//?high?value?may?be?configured?by?property
????????????int?h?=?127;//默認的
????????????String?integerCacheHighPropValue?=//定義一個String?
????????????????sun.misc.VM.getSavedProperty("java.lang.Integer.IntegerCache.high");//取得設置的值????????????if?(integerCacheHighPropValue?!=?null)?{//如果設置了就用設置的值????????????????int?i?=?parseInt(integerCacheHighPropValue);//把String轉換為int
????????????????i?=?Math.max(i,?127);//獲得i和127的更大的一個,其實是不能小與默認的????????????????//?Maximum?array?size?is?Integer.MAX_VALUE
????????????????h?=?Math.min(i,?Integer.MAX_VALUE?-?(-low));//如果取的小的那個,不能超過Integer的最大值+low
????????????}
????????????high?=?h;//最大值為127

????????????cache?=?new?Integer[(high?-?low)?+?1];//創建緩存數組大小????????????int?j?=?low;//最小值????????????for(int?k?=?0;?k?<?cache.length;?k++)
????????????????cache[k]?=?new?Integer(j++);//緩存初始化
????????}????????private?IntegerCache()?{}//私有構造
????}

問題解決

Integer的緩存

  看完之后我相信基本都知道為啥一開始的那一段代碼會這樣了,我現在做一個小的總結,Integer里面有一個內部類IntegerCache,是用來做緩存優化性能的。默認緩存了-128到127中間的數字,據說這些使的比較頻繁。其實java里面好多的類都有這樣的優化。如果在-128-127之間的就直接拿緩存的,不在的就new一個Integer所以這也就解釋了上面的那個問題了嘛


轉載于:https://blog.51cto.com/zhangtaoze/1917470

總結

以上是生活随笔為你收集整理的由自动装箱和拆箱引发我看Integer源码的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 欧美三级韩国三级日本三斤 | 亚洲免费一级 | 综合色伊人| 亚洲色图 美腿丝袜 | 狠狠精品干练久久久无码中文字幕 | 人人妻人人做人人爽 | 久久视频在线观看免费 | 欧美xxxx性 | www.亚洲| av免费在线网站 | 日韩欧美综合久久 | 无码任你躁久久久久久老妇 | 97人妻精品视频一区 | 九九久久国产 | 午夜久久久久久久久久久 | 一道本在线观看 | 宿舍女女闺蜜调教羞辱 | 在线观看中文字幕一区 | 亚洲一级一级 | 国产成人精品一区二区三区在线 | 在线看成人av | 亚洲一区二区三区久久 | 日日摸夜夜添狠狠添欧美 | 欧美1区2区3区4区 | 成人福利在线播放 | 国产11页 | 亚洲久操 | 日本美女一级视频 | 色91精品久久久久久久久 | 日韩一区二区三区在线观看 | 中文字幕不卡在线观看 | 国产又好看的毛片 | 久久精品国产精品亚洲毛片 | 波多野久久 | 成人免费视频网站在线看 | 精品成人| 人妻少妇被猛烈进入中文字幕 | 欧美18一19性内谢 | 男人天堂av在线播放 | 日婷婷| 我们的生活第五季在线观看免费 | 国产超碰人人爽人人做人人爱 | 熟妇大屁股一区二区三区视频 | 精品久久久中文字幕人妻 | 夏目彩春娇喘呻吟高潮迭起 | 进去里视频在线观看 | 成年人在线视频免费观看 | 亚洲高清福利 | 亚洲av无一区二区三区怡春院 | 久久精品黄aa片一区二区三区 | 欧美成人一区二区三区高清 | www.好了av| av一区二区三区免费观看 | 国产淫| 青青草福利视频 | 日本成人在线免费观看 | 成人性生交大片免费看中文 | 日韩亚洲视频 | 精品人妻一区二区三区换脸明星 | 免费在线 | 国产最新精品 | 欧美jizz18性欧美 | 手机在线一区二区 | 国产又爽又黄无码无遮挡在线观看 | 黑人巨大精品人妻一区二区 | 亚洲精品911| 另类尿喷潮videofree | 天天爱av| 女生被男生c | 日本视频色| 国产成人在线免费观看 | av黄色网 | 在线播放日韩 | 中文字幕乱码一区二区 | 少妇户外露出[11p] | 成人动漫视频在线观看 | 三年中文免费观看大全动漫 | 青青草原伊人 | 国产一级在线视频 | 成av在线 | 国产色呦呦 | 久久综合伊人77777麻豆最新章节 | 91av网址 | 污污视频在线观看网站 | mm视频在线观看 | 国产福利视频在线 | 国产一区二区三区精品愉拍 | 亚洲图片欧美激情 | 91啦中文| 国产亚洲电影 | 在线中文字幕日韩 | 国产亚洲一区二区三区 | 国产日韩中文字幕 | 嫩草网站 | 新婚夫妇白天啪啪自拍 | 操她视频网站 | 国产精品久久久久999 | 丝袜制服中文字幕 | 国产精品久久网 |