StringBuilder類是一個可變的字符序列。
StringBuilder()
構造一個不帶任何字符的字符串生成器,其初始容量為 16 個字符。
StringBuilder(CharSequence seq)
構造一個字符串生成器,它包含與指定的 CharSequence 相同的字符。
StringBuilder(int capacity)
構造一個不帶任何字符的字符串生成器,其初始容量由 capacity 參數指定。
StringBuilder(String str)
構造一個字符串生成器,並初始化為指定的字符串內容。
StringBuilder類的幾個常用方法:
append(任意類型) 追加到字符串后面
reverse 反轉字符串
insert(int offset, 任意類型) 在某個index后插入字符串
toString() 返回String類的對象
先看一段String類的字符串拼接的代碼。
String s = "hello" 會在常量池開辟一個內存空間來存儲”hello"。
s += "world"會先在常量池開辟一個內存空間來存儲“world"。然后再開辟一個內存空間來存儲”helloworld“。
這么以來,001與002就成為了垃圾內存空間了。這么簡單的一個操作就產生了兩個垃圾內存空間,如果有大量的字符串拼接,將會造成極大的浪費。
StringBuilder的作用
上面的例子可以知道String類的字符串拼接會產生大量的垃圾內存空間。但是StringBuilder的字符串拼接是直接在原來的內存空間操作的,即直接在hello這個內存空間把hello拼接為helloworld。
來證明下:
public class StringBuilderTest { public static void main(String[] args){ StringBuilder sb = new StringBuilder(); StringBuilder sb2 = sb.append("hello"); System.out.println(sb); System.out.println(sb2); // 引用類型,判斷的是他們的內存地址是否一樣 System.out.println(sb == sb2); } }
輸出結果是:
hello
hello
true
String類與StringBuilder類的相互轉換
1.String類轉換為StringBuilder類
public class String12 { public static void main(String[] args){ String s = "hello"; StringBuilder sb = new StringBuilder(s); System.out.println(sb); } }
2.StringBuilder類轉換為String類
public class String12 { public static void main(String[] args){ StringBuilder sb = new StringBuilder(); sb.append("abc").append("efg"); String s = sb.toString(); System.out.println(s); } }