String中的 「 」 號拼接字串的理解

2021-09-24 12:07:25 字數 1123 閱讀 2146

string s = new string(「hello world」)可能建立兩個物件也可能建立乙個物件。如果方法區中有「hello world」字串常量的話,則僅僅在堆中建立乙個物件。如果方法區中沒有「hello world」物件,則堆上和方法區中都需要建立物件。

上面是字串常量拼接的例子:在編譯時,jvm編譯器對字串做了優化,str3就被優化成「hello word」,str3和str4指向字串常量池同乙個字串常量,所以==比較為true

string str5 = "hello";

string str6 = " word";

string str7 = "hello word";

string str8 = str5+" word";

system.out.println(str7 == str8); //false

stringbuilder sb = new stringbuilder( );

str8 = sb.tostring();

stringbuilder 的 tostring( )方法底層new了乙個string物件,所以str8在堆記憶體中重新開闢了新空間,而str7指向常量池,所以str7 == str8為false。

變數字串拼接和常量字串拼接結果是不一樣的。因為變數字串拼接是先開闢空間,然後再拼接。

String字串拼接陷阱

先看如下程式 對於一般類物件 public class a public class test public static void main string args 再看如下程式 public class test public static void main string args 輸出的結果...

String字串拼接速率

在for迴圈中,比較常用的字串拼接方式包括以下五種方式 string,string.concat apache.commons.lang3.stringutils.join stringbuffer stringbuilder 接下來,依次分析上述五種方式 string,public final s...

String的拼接字串的底層實現原理

下面 public class test1 public string tostring 可以發現 stringbuilder物件的tostring方法中是新new了乙個string物件,所以str4是指向乙個使用new新建立出來的乙個物件,不會復用常量池中的物件 所以str3的位址是和str4的位...