【轉】String str = new String("abc")建立了多少個對象?

來源:互聯網
上載者:User

標籤:筆試   程式員   初始化   對象   java程式員   反編譯   技術   網上   建立   

原帖地址:http://www.cnblogs.com/dolphin0520/p/3778589.html

這個問題在很多書籍上都有說到比如《Java程式員面試寶典》,包括很多國內大公司筆試面試題都會遇到,大部分網上流傳的以及一些面試書籍上都說是2個對象,這種說法是片面的。

  如果有不懂得地方可以參考這篇文章:

  http://rednaxelafx.iteye.com/blog/774673/

  首先必須弄清楚建立對象的含義,建立是什麼時候建立的?這段代碼在運行期間會建立2個對象嗎?毫無疑問不可能,用javap -c反編譯即可得到JVM執行的位元組碼內容:

  

  很顯然,new只調用了一次,也就是說只建立了一個對象。

  而這道題目讓人混淆的地方就是這裡,這段代碼在運行期間確實只建立了一個對象,即在堆上建立了"abc"對象。而為什麼大家都在說是2個對象呢,這裡面要澄清一個概念  該段代碼執行過程和類的載入過程是有區別的。在類載入的過程中,確實在運行時常量池中建立了一個"abc"對象,而在代碼執行過程中確實只建立了一個String對象。

  因此,這個問題如果換成 String str = new String("abc")涉及到幾個String對象?合理的解釋是2個。

  個人覺得在面試的時候如果遇到這個問題,可以向面試官詢問清楚”是這段代碼執行過程中建立了多少個對象還是涉及到多少個對象“再根據具體的來進行回答。

參考貼地址:http://rednaxelafx.iteye.com/blog/774673/

問題1:

String s = new String("xyz"); 

在運行時涉及幾個String執行個體?

答案:兩個,一個是字串字面量"xyz"所對應的、駐留(intern)在一個全域共用的字串常量池中的執行個體,另一個是通過new String(String)建立並初始化的、內容與"xyz"相同的執行個體。

問題2:

String s = new String("xyz");

涉及使用者聲明的幾個String類型的變數?

答案:一個,就是String s。

問題2:

String s = null;  

涉及使用者聲明的幾個String類型的變數?

Java裡變數就是變數,參考型別的變數只是對某個對象執行個體或者null的引用,不是執行個體本身。聲明變數的個數跟建立執行個體的個數沒有必然關係,像是說:

String s1 = "a";  String s2 = s1.concat("");  String s3 = null;  new String(s1); 

這段代碼會涉及3個String類型的變數, 
1、s1,指向下面String執行個體的1 
2、s2,指向與s1相同 
3、s3,值為null,不指向任何執行個體 

以及3個String執行個體, 
1、"a"字面量對應的駐留的字串常量的String執行個體 
2、""字面量對應的駐留的字串常量的String執行個體 
(String.concat()是個有趣的方法,當發現傳入的參數是Null 字元串時會返回this,所以這裡不會額外建立新的String執行個體) 
3、通過new String(String)建立的新String執行個體;沒有任何變數指向它。 

【轉】String str = new String("abc")建立了多少個對象?

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.