2014-09-24 91 views
0

這兩個分配在內存分配和字符串池方面有什麼區別。字符串內存分配和字符串池概念

String b = "sunil" + "khokhar"; 

String a = "sunil"; 
String b = a + "khokhar"; 
+1

你認爲會發生什麼?你如何看待編譯器和字符串池會有所不同?你有沒有考慮過使用'final'可能會產生什麼差異? – 2014-09-24 06:46:20

+0

這有什麼關係。您希望使用上述方法的實際要求是什麼? – vikeng21 2014-09-24 06:54:30

回答

2
String b = "sunil" + "khokhar"; 

兩個"sunil""khokar"將被串聯和b值將在編譯時得到解決。因此,"sunilkhokhar將出現在字符串常量池中。 和

String a = "sunil"; 
String b = a + "khokhar"; 

"sunil""khokar"將編譯時間常數(和被添加到字符串池)。 但b = a+"khokhar"將使用StringBuilder完成,並將在運行時發生。 因此,b將出現在而不在字符串常量池

0

每次您創建用戶「+」和「=」新對象時,字符串都是最終的類。對於變量賦值,如果值已經存在於池中,則引用將與Object一起返回。

+0

不是每次。不,只有當你使用*在連接時不是最終的引用*。因此,如果'a'是* final *,'a +「khokhar」'將在編譯時解析。 – TheLostMind 2014-09-24 07:08:13

+0

我認爲在字符串b =「sunil」+「khokhar」的情況下,只有一個對象被創建,其值爲「sunilkhokhar」,並在字符串池中創建一個引用該對象的條目。 – 2014-09-24 07:21:22

+0

以及String a =「sunil」的情況; String b = a +「khokhar」;兩個對象被創建並且2個參考。@TheLostMind糾正我,如果我錯了 – 2014-09-24 07:23:39