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

2021-09-27 02:50:44 字數 901 閱讀 7869

下面**:

public class test1 

}

public string tostring()
可以發現:stringbuilder物件的tostring方法中是新new了乙個string物件,所以str4是指向乙個使用new新建立出來的乙個物件,不會復用常量池中的物件;

所以str3的位址是和str4的位址不同的,所以結果為false;

觀察另外一段**,在查詢資料時碰巧遇到的,就順便學習了一下:

public class test1 

}

通過執行可知結果為:nullhello

為什麼呢?

通過觀察原始碼:

if (str == null)

int len = str.length();

ensurecapacityinternal(count + len);

str.getchars(0, len, value, count);

count += len;

return this;

}int c = count;

ensurecapacityinternal(c + 4);

final char value = this.value;//在原始碼中可找到 char value為空

value[c++] = 'n';

value[c++] = 'u';

value[c++] = 'l';

value[c++] = 'l';

count = c;

return this;

}所以該段**的結果為:null222222

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中的 「 」 號拼接字串的理解

string s new string hello world 可能建立兩個物件也可能建立乙個物件。如果方法區中有 hello world 字串常量的話,則僅僅在堆中建立乙個物件。如果方法區中沒有 hello world 物件,則堆上和方法區中都需要建立物件。上面是字串常量拼接的例子 在編譯時,jv...