成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

Java之Intern詳解

這篇文章主要介紹“Java之Intern詳解”,在日常操作中,相信很多人在Java之Intern詳解問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對(duì)大家解答”Java之Intern詳解”的疑惑有所幫助!接下來,請(qǐng)跟著小編一起來學(xué)習(xí)吧!

創(chuàng)新互聯(lián)建站服務(wù)項(xiàng)目包括鎮(zhèn)巴網(wǎng)站建設(shè)、鎮(zhèn)巴網(wǎng)站制作、鎮(zhèn)巴網(wǎng)頁制作以及鎮(zhèn)巴網(wǎng)絡(luò)營銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢(shì)、行業(yè)經(jīng)驗(yàn)、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,鎮(zhèn)巴網(wǎng)站推廣取得了明顯的社會(huì)效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到鎮(zhèn)巴省份的部分城市,未來相信會(huì)繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!

“哥,你發(fā)給我的那篇文章我看了,結(jié)果直接把我給看得不想學(xué) Java 了!”三妹氣沖沖地說。

“哪一篇啊?”看著三妹面色沉重,我關(guān)心地問到。

“就是美團(tuán)技術(shù)團(tuán)隊(duì)深入解析 String.intern() 那篇啊!”三妹回答。

https://tech.meituan.com/2014/03/06/in-depth-understanding-string-intern.html

“哦,我想起來了,不挺好一篇文章嘛,深入淺出,精品中的精品,看完后你應(yīng)該對(duì) String 的 intern 徹底理解了才對(duì)呀?!?/p>

“好是好,但我就是看不懂!”三妹委屈地說,“哥,還是你親自給我講講吧?”

“好吧,上次學(xué)的字符串常量池你都搞清楚了吧?”

“嗯?!比梦⑽⒌狞c(diǎn)了點(diǎn)頭。

要理解美團(tuán)技術(shù)團(tuán)隊(duì)的這篇文章,你只需要記住這幾點(diǎn)內(nèi)容:

第一,使用雙引號(hào)聲明的字符串對(duì)象會(huì)保存在字符串常量池中。

第二,使用 new  關(guān)鍵字創(chuàng)建的字符串對(duì)象會(huì)先從字符串常量池中找,如果沒找到就創(chuàng)建一個(gè),然后再在堆中創(chuàng)建字符串對(duì)象;如果找到了,就直接在堆中創(chuàng)建字符串對(duì)象。

第三,針對(duì)沒有使用雙引號(hào)聲明的字符串對(duì)象來說,就像下面代碼中的 s1 那樣:

String s1 = new String("二哥") + new String("三妹");

如果想把 s1 的內(nèi)容也放入字符串常量池的話,可以調(diào)用 intern() 方法來完成。

不過,需要注意的是,Java 7 的時(shí)候,字符串常量池從永久代中移動(dòng)到了堆中,雖然此時(shí)永久代還沒有完全被移除。Java 8  的時(shí)候,永久代被徹底移除。

這個(gè)變化也直接影響了 String.intern() 方法在執(zhí)行時(shí)的策略,Java 7 之前,執(zhí)行 String.intern()  方法的時(shí)候,不管對(duì)象在堆中是否已經(jīng)創(chuàng)建,字符串常量池中仍然會(huì)創(chuàng)建一個(gè)內(nèi)容完全相同的新對(duì)象;Java 7 之后呢,由于字符串常量池放在了堆中,執(zhí)行  String.intern()  方法的時(shí)候,如果對(duì)象在堆中已經(jīng)創(chuàng)建了,字符串常量池中就不需要再創(chuàng)建新的對(duì)象了,而是直接保存堆中對(duì)象的引用,也就節(jié)省了一部分的內(nèi)存空間。

“三妹,來猜猜這段代碼輸出的結(jié)果吧?!蔽艺f。

String s1 = new String("二哥三妹"); String s2 = s1.intern(); System.out.println(s1 == s2);

“哥,這我完全猜不出啊,還是你直接解釋吧?!比谜f。

“好吧?!?/p>

第一行代碼,字符串常量池中會(huì)先創(chuàng)建一個(gè)“二哥三妹”的對(duì)象,然后堆中會(huì)再創(chuàng)建一個(gè)“二哥三妹”的對(duì)象,s1 引用的是堆中的對(duì)象。

第二行代碼,對(duì) s1 執(zhí)行 intern() 方法,該方法會(huì)從字符串常量池中查找“二哥三妹”這個(gè)字符串是否存在,此時(shí)是存在的,所以 s2  引用的是字符串常量池中的對(duì)象。

也就意味著 s1 和 s2 的引用地址是不同的,一個(gè)來自堆,一個(gè)來自字符串常量池,所以輸出的結(jié)果為 false。

“來看一下運(yùn)行結(jié)果?!蔽艺f。

false

“我來畫幅圖,幫助你理解下?!笨吹饺皿@訝的表情,我耐心地說。

Java之Intern詳解

“這下理解了吧?”我問三妹。

“嗯嗯,一下子就豁然開朗了!”三妹說。

“好,我們?cè)賮砜聪旅孢@段代碼?!?/p>

String s1 = new String("二哥") + new String("三妹"); String s2 = s1.intern(); System.out.println(s1 == s2);

“難道也輸出 false ?”三妹有點(diǎn)不確定。

“不,這段代碼會(huì)輸出 true?!蔽曳穸巳玫牟聹y。

“為啥呀?”三妹迫切地想要知道答案。

第一行代碼,會(huì)在字符串常量池中創(chuàng)建兩個(gè)對(duì)象,一個(gè)是“二哥”,一個(gè)是“三妹”,然后在堆中會(huì)創(chuàng)建兩個(gè)匿名對(duì)象“二哥”和“三妹”(可以暫時(shí)忽略),最后還有一個(gè)“二哥三妹”的對(duì)象,s1  引用的是堆中“二哥三妹”這個(gè)對(duì)象。

第二行代碼,對(duì) s1 執(zhí)行 intern()  方法,該方法會(huì)從字符串常量池中查找“二哥三妹”這個(gè)對(duì)象是否存在,此時(shí)不存在的,但堆中已經(jīng)存在了,所以字符串常量池中保存的是堆中這個(gè)“二哥三妹”對(duì)象的引用,也就是說,s2  和 s1 的引用地址是相同的,所以輸出的結(jié)果為 true。

“來看一下運(yùn)行結(jié)果。”我胸有成竹地說。

true

“我再來畫幅圖,幫助你理解下?!?/p>

Java之Intern詳解

“哇,我明白了!”三妹長舒一口氣,大有感慨 intern 也沒什么難理解的意味。

不過需要注意的是,盡管 intern 可以確保所有具有相同內(nèi)容的字符串共享相同的內(nèi)存空間,但也不要爛用  intern,因?yàn)槿魏蔚木彺娉囟际怯写笮∠拗频?,不能無緣無故就占用了相對(duì)稀缺的緩存空間,導(dǎo)致其他字符串沒有坑位可占。

另外,字符串常量池本質(zhì)上是一個(gè)固定大小的  StringTable,如果放進(jìn)去的字符串過多,就會(huì)造成嚴(yán)重的哈希沖突,從而導(dǎo)致鏈表變長,鏈表變長也就意味著字符串常量池的性能會(huì)大幅下降,因?yàn)橐粋€(gè)一個(gè)找是需要花費(fèi)時(shí)間的。

“好了,三妹,關(guān)于 String 的 intern 就講到這吧,這次理解了吧?”我問。

“哥,你真棒!”

看到三妹一點(diǎn)一滴的進(jìn)步,我也感到由衷的開心。

到此,關(guān)于“Java之Intern詳解”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)砀鄬?shí)用的文章!

文章題目:Java之Intern詳解
分享網(wǎng)址:http://jinyejixie.com/article26/pgiicg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站設(shè)計(jì)、用戶體驗(yàn)網(wǎng)頁設(shè)計(jì)公司、標(biāo)簽優(yōu)化、外貿(mào)建站做網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)
什邡市| 长子县| 长沙市| 福鼎市| 克什克腾旗| 祥云县| 广州市| 怀远县| 三都| 阜新| 县级市| 信宜市| 灯塔市| 类乌齐县| 怀化市| 新闻| 濮阳市| 乌鲁木齐市| 永昌县| 崇明县| 新密市| 哈巴河县| 开化县| 沅陵县| 江津市| 彰化市| 搜索| 修水县| 庆云县| 宜春市| 龙海市| 明水县| 清丰县| 高淳县| 隆化县| 洛南县| 台江县| 金乡县| 集安市| 宜川县| 万山特区|