Java 中三個類別負責字元操作:
Character:單一字元操作String:字串操作,不可變類別StringBuffer:字串操作,可變類別final 類別,不可被繼承StringBuffer sb = new StringBuffer();sb = "welcome!"; // 錯誤null,透過 append() 賦值:sb.append("hello");StringBuffer 效率遠高於 String:
String str = new String("welcome to ");
str += "here";
實際處理步驟:建立 StringBuffer → 呼叫 append() → toString()。String 連接多出額外操作,效能打折。且 String 不可變,每次操作重建新物件,舊物件成為垃圾回收對象,影響效能。
將 26 個英文字母重複加 5000 次:
String tempstr = "abcdefghijklmnopqrstuvwxyz";
int times = 5000;
long lstart1 = System.currentTimeMillis();
String str = "";
for (int i = 0; i < times; i++) {
str += tempstr;
}
long lend1 = System.currentTimeMillis();
System.out.println(lend1 - lstart1);
結果:約 46,687 ms(46 秒)
String tempstr = "abcdefghijklmnopqrstuvwxyz";
int times = 5000;
long lstart2 = System.currentTimeMillis();
StringBuffer sb = new StringBuffer();
for (int i = 0; i < times; i++) {
sb.append(tempstr);
}
long lend2 = System.currentTimeMillis();
System.out.println(lend2 - lstart2);
結果:16 ms 或 0 ms
結論:StringBuffer 速度幾乎是 String 上萬倍。迴圈 100,000 次差異更大。
str += "here"; 等同於:
StringBuffer sb = new StringBuffer(str);
sb.append("here");
str = sb.toString();
直接用 + 連接 String 等同於每次迴圈新建 StringBuffer、append、toString,效能極差。
程式中需頻繁修改連接字串操作時,使用 StringBuffer 效能更高。
