這兩個分配在內存分配和字符串池方面有什麼區別。字符串內存分配和字符串池概念
String b = "sunil" + "khokhar";
和
String a = "sunil";
String b = a + "khokhar";
這兩個分配在內存分配和字符串池方面有什麼區別。字符串內存分配和字符串池概念
String b = "sunil" + "khokhar";
和
String a = "sunil";
String b = a + "khokhar";
String b = "sunil" + "khokhar";
兩個"sunil"
和"khokar"
將被串聯和b
值將在編譯時得到解決。因此,"sunilkhokhar
將出現在字符串常量池中。 和
String a = "sunil";
String b = a + "khokhar";
"sunil"
和"khokar"
將編譯時間常數(和被添加到字符串池)。 但b = a+"khokhar"
將使用StringBuilder
完成,並將在運行時發生。 因此,b
將出現在堆而不在字符串常量池。
每次您創建用戶「+」和「=」新對象時,字符串都是最終的類。對於變量賦值,如果值已經存在於池中,則引用將與Object一起返回。
不是每次。不,只有當你使用*在連接時不是最終的引用*。因此,如果'a'是* final *,'a +「khokhar」'將在編譯時解析。 – TheLostMind 2014-09-24 07:08:13
我認爲在字符串b =「sunil」+「khokhar」的情況下,只有一個對象被創建,其值爲「sunilkhokhar」,並在字符串池中創建一個引用該對象的條目。 – 2014-09-24 07:21:22
以及String a =「sunil」的情況; String b = a +「khokhar」;兩個對象被創建並且2個參考。@TheLostMind糾正我,如果我錯了 – 2014-09-24 07:23:39
你認爲會發生什麼?你如何看待編譯器和字符串池會有所不同?你有沒有考慮過使用'final'可能會產生什麼差異? – 2014-09-24 06:46:20
這有什麼關係。您希望使用上述方法的實際要求是什麼? – vikeng21 2014-09-24 06:54:30