小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

面試題之String str = new String(“abc”); 創(chuàng)建了幾個(gè)對(duì)象

 司馬小賊 2017-11-18
                          今天去面試的時(shí)候碰到了這個(gè)問(wèn)題:String str = new String("abc"); 創(chuàng)建了幾個(gè)對(duì)象,回來(lái)自己研究并查閱資料才發(fā)現(xiàn)答錯(cuò)了。。
網(wǎng)上的爭(zhēng)論不少,有的說(shuō)是兩個(gè),答案應(yīng)該是:兩個(gè)或一個(gè)
理由解釋如下:
都了解java 的字符串常量緩沖區(qū)(字符串池,字符串常量池),
如果代碼是這樣的:


  1. String str2 = new String("abc");  

并且 abc 字符串之前沒(méi)有用過(guò),這毫無(wú)疑問(wèn)創(chuàng)建了兩個(gè)對(duì)象,一個(gè)是new  String 創(chuàng)建的一個(gè)新的對(duì)象,一個(gè)是常量“abc”對(duì)象的內(nèi)容創(chuàng)建出的一個(gè)新的String對(duì)象,


但是如果代碼是這樣子的:

  1. String str1 = "abc";  
  2.   
  3. String str2 = new String("abc");  

嗯,創(chuàng)建幾個(gè)就不好說(shuō)了,我們還是測(cè)試一下吧,首先我們打開(kāi)cmd.exe, 通過(guò)javac *.java編譯好該Java文件,然后通過(guò)命令javap -c *來(lái)查看java編譯后的ByteCode字節(jié)碼,


ldc的含義是:將常量值從常量池中取出來(lái)并且壓入棧中。從上圖中,我們可以看到第0行和第7行中的字符串引用是同一個(gè),這說(shuō)明了,在編譯期間,該字符串變量的值已經(jīng)確定了下來(lái),并且將該字符串值緩存在緩沖區(qū)中,同時(shí)讓該變量指向該字符串值,后面如果有使用相同的字符串值,則繼續(xù)指向同一個(gè)字符串值

所以String str2 = new String("abc"); 此時(shí)就創(chuàng)建一個(gè)對(duì)象,而abc 則是從字符串常量緩沖區(qū)中取出來(lái)的。

ok。就是這個(gè)樣子。


    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多