觀察如下代碼:
String s = ""; for (int i = 0; i < 1000; i++) { s = s + "," + i; }
雖然可以直接拼接字符串,但是,在循環中,每次循環都會創建新的字符串對象,然后扔掉舊的字符串。這樣,絕大部分字符串都是臨時對象,不但浪費內存,還會影響GC效率
為了能高效拼接字符串,Java標准庫提供了StringBuilder,它是一個可變對象,可以預分配緩沖區,這樣,往StringBuilder中新增字符時,不會創建新的臨時對象:
StringBuilder sb = new StringBuilder(1024); for (int i = 0; i < 1000; i++) { sb.append(','); sb.append(i); } String s = sb.toString();
StringBuilder還可以進行鏈式操作:
public class Main { public static void main(String[] args) { var sb = new StringBuilder(1024); sb.append("Mr ") .append("Bob") .append("!") .insert(0, "Hello, "); System.out.println(sb.toString()); } }