![Java編譯器中對(duì)String對(duì)象的優(yōu)化_第1頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-3/1/7b0008d0-6b06-42c5-8122-4598b7d63c8d/7b0008d0-6b06-42c5-8122-4598b7d63c8d1.gif)
![Java編譯器中對(duì)String對(duì)象的優(yōu)化_第2頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-3/1/7b0008d0-6b06-42c5-8122-4598b7d63c8d/7b0008d0-6b06-42c5-8122-4598b7d63c8d2.gif)
![Java編譯器中對(duì)String對(duì)象的優(yōu)化_第3頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-3/1/7b0008d0-6b06-42c5-8122-4598b7d63c8d/7b0008d0-6b06-42c5-8122-4598b7d63c8d3.gif)
![Java編譯器中對(duì)String對(duì)象的優(yōu)化_第4頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-3/1/7b0008d0-6b06-42c5-8122-4598b7d63c8d/7b0008d0-6b06-42c5-8122-4598b7d63c8d4.gif)
下載本文檔
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、Java編譯器中對(duì)String對(duì)象的優(yōu)化作者:佚名來(lái)源:網(wǎng)絡(luò)2009年9月17日發(fā)表評(píng)論進(jìn)入社區(qū) Java編譯器中對(duì)String對(duì)象的優(yōu)化 首先把問(wèn)題擺出來(lái),先看這個(gè)代碼: 打印結(jié)果會(huì)是什么?類似這樣的問(wèn)題,有人考過(guò)我,我也拿來(lái)考過(guò)別人(蠻好玩的,大家也可以拿來(lái)問(wèn)人玩),一般答案會(huì)是以下幾種: 1、true "a" + "b" 的結(jié)果就是"ab",這樣a,
2、b都是"ab"了,內(nèi)容一樣所以"相等",結(jié)果true. 一般Java新人如是答。 2、false "a" + "a"會(huì)生成新的對(duì)象"aa",但是這個(gè)對(duì)象和String a = "ab"不同,(a = b)是比較對(duì)象引用,因此不相等,結(jié)果false. 對(duì)Java的String有一定了解的通常這樣回答。
3、 3、true String a = "ab"創(chuàng)建了新的對(duì)象"ab"再執(zhí)行String b = "a" + "b"結(jié)果b="ab",這里沒(méi)有創(chuàng)建新的對(duì)象,而是從JVM字符串常量池中獲取之前已經(jīng)存在的"ab"對(duì)象。因此a,b具有對(duì)同一個(gè)string對(duì)象的引用,兩個(gè)引用相等,結(jié)果true. 能回答出這個(gè)答案的,基本已經(jīng)是高手了,對(duì)Java中的string機(jī)制比較了解。 很遺
4、憾,這個(gè)答案是不夠準(zhǔn)確的?;蛘哒f(shuō),根本沒(méi)有運(yùn)行時(shí)計(jì)算b = "a" + "b"這個(gè)操作。實(shí)際上運(yùn)行時(shí)只有String b = "ab". 3的觀點(diǎn)適合解釋以下情況: 如果String b = "a" + "b"是在運(yùn)行期執(zhí)行,則3的觀點(diǎn)是無(wú)法解釋的。運(yùn)行期的兩個(gè)string相加,會(huì)產(chǎn)生新的對(duì)象的。(本文后面對(duì)此有解釋) 4、true 下面是我的回答:編譯
5、優(yōu)化+ 3的處理方式 = 最后的true String b = "a" + "b"編譯器將這個(gè)"a" + "b"作為常量表達(dá)式,在編譯時(shí)進(jìn)行優(yōu)化,直接取結(jié)果"ab",這樣這個(gè)問(wèn)題退化。 然后根據(jù)3的解釋,得到結(jié)果true. 這里有一個(gè)疑問(wèn)就是String不是基本類型,像 int secondsOfDay = 24 * 60 * 60;
6、0; 這樣的表達(dá)式是常量表達(dá)式,編譯器在編譯時(shí)直接計(jì)算容易理解,而"a" + "b" 這樣的表達(dá)式,string是對(duì)象不是基本類型,編譯器會(huì)把它當(dāng)成常量表達(dá)式來(lái)優(yōu)化嗎?下面簡(jiǎn)單證明我的推斷,首先編譯這個(gè)類: public class Test private String a = "aa" 復(fù)制class文件備用,然后修改為: public class Test private String a = "a
7、" + "a" 再次編譯,用ue之類的文本編輯器打開(kāi),察看二進(jìn)制內(nèi)容,可以發(fā)現(xiàn),兩個(gè)class文件完全一致,連一個(gè)字節(jié)都不差。 ok,真相大白了。根本不存在運(yùn)行期的處理String b = "a" + "b"這樣的代碼的問(wèn)題,編譯時(shí)就直接優(yōu)化掉了。 下面進(jìn)一步探討,什么樣的string + 表達(dá)式會(huì)被編譯器當(dāng)成常量表達(dá)式? String b = "a" + &q
8、uot;b" 這個(gè)String + String被正式是ok的,那么string + 基本類型呢? 可見(jiàn)編譯器對(duì)string + 基本類型是當(dāng)成常量表達(dá)式直接求值來(lái)優(yōu)化的。 再注意看這里的string都是"*"這樣的,我們換成變量來(lái)試試: 這個(gè)好理解,"a" + bb中的bb是變量,不能進(jìn)行優(yōu)化。這里很很好的解釋了為什么3的觀點(diǎn)不正確,如果String+String的操作是在運(yùn)行時(shí)進(jìn)行的,則會(huì)產(chǎn)生新的對(duì)象,而不是直接從jvm的string池中獲取。 再修改一下,把bb作為常量變量: 竟然又是true,編譯器的優(yōu)化好厲害啊!呵呵!考慮下面這種情況: 看來(lái)Java(包括編譯器和jvm)對(duì)string的優(yōu)化,真的是到了極點(diǎn)了,string這個(gè)所謂的"對(duì)象",完全不可
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 八項(xiàng)規(guī)定手寫承諾書范本
- 手足口病防控培訓(xùn)課件
- 2025-2030全球等離子處理設(shè)備行業(yè)調(diào)研及趨勢(shì)分析報(bào)告
- 2025-2030全球醫(yī)用無(wú)紡布電極片行業(yè)調(diào)研及趨勢(shì)分析報(bào)告
- 2025-2030全球鋰電池用隔膜行業(yè)調(diào)研及趨勢(shì)分析報(bào)告
- 2025年全球及中國(guó)發(fā)泡奶精行業(yè)頭部企業(yè)市場(chǎng)占有率及排名調(diào)研報(bào)告
- 2025年全球及中國(guó)油炸方便面生產(chǎn)線行業(yè)頭部企業(yè)市場(chǎng)占有率及排名調(diào)研報(bào)告
- 2025年全球及中國(guó)超薄壁PET熱縮管行業(yè)頭部企業(yè)市場(chǎng)占有率及排名調(diào)研報(bào)告
- 2025-2030全球耐高溫耐火絕緣磚行業(yè)調(diào)研及趨勢(shì)分析報(bào)告
- 2025-2030全球衛(wèi)星鋰離子電池行業(yè)調(diào)研及趨勢(shì)分析報(bào)告
- 房地產(chǎn)調(diào)控政策解讀
- 產(chǎn)前診斷室護(hù)理工作總結(jié)
- 2024-2025學(xué)年八年級(jí)數(shù)學(xué)人教版上冊(cè)寒假作業(yè)(綜合復(fù)習(xí)能力提升篇)(含答案)
- 《AP內(nèi)容介紹》課件
- 醫(yī)生定期考核簡(jiǎn)易程序述職報(bào)告范文(10篇)
- 市政工程人員績(jī)效考核制度
- 公園景區(qū)安全生產(chǎn)
- 安全創(chuàng)新創(chuàng)效
- 《中國(guó)糖尿病防治指南(2024版)》更新要點(diǎn)解讀
- 初級(jí)創(chuàng)傷救治課件
- 2024年社會(huì)工作者(中級(jí))-社會(huì)綜合能力考試歷年真題可打印
評(píng)論
0/150
提交評(píng)論