關於StringBuffer對象的append方法介紹,在Ivor Horton所著的《Java 2 入門經典(JDK 5)》(英文名:Beginning Java 2,JDK 5 Edition)中第4章數組和字符串講解中,第4.4小節(向StringBuffer對象增加其他內容)介紹了用append()方法追加子串的功能。原文提供例子如下:
StringBuffer buf=new StringBuffer("Hard ");
String aString = "Waxworks";
buf.append(aString,3,4);
原文說明:這個操作將aString的從索引位置3開始的由四個字符組成的子串追加到StringBuffer對象buf中。然后buf對象就會包含字符 串"Hard work"。
請注意,這個代碼的實際運行結果是: buf對象包含的字符串為"Hard w"。
根據運行結果分析,StringBuffer對象的append()方法的參數,如果是String類型,那么,后面取子串的操作實際是從索引3開始,取值到索引4之前的串。如果append的語句改成 buf.append(aString,3,3); ,那么沒有添加aString的子串,即 buf包含的字符實際還是"Hard "。如果此語句再改成 buf.append(aString3,2); ,那么系統會拋出"IndexOutOfBoundsException"的異常!
但是,如果append()的參數是字符數組(char[]),那么結果就如原文所述,buf將包含串"Hard work". 代碼如下:
StringBuffer buf=new StringBuffer("Hard ");
char[] text ={'W','a','x','w','o','r','k','s'};
buf.append(text ,3,4); // buf包含串"Hard work"
=============================================================================================================================================================================================================== String一旦賦值或實例化后就不可更改,如果賦予新值將會重新開辟內存地址進行存儲。
而StringBuffer類使用append和insert等方法改變字符串值時只是在原有對象存儲的內存地址上進行連續操作,減少了資源的開銷。
因此我們得出結論:當需要進行頻繁修改字符串的操作時先建立StringBuffer類對象進行操作,將最后結果轉化成String類對象返回,這樣效率會高很多。
關於String與StringBuffer的使用在各大網站都有說明了,因為String對象一旦創建是不能改變的,總的來說StringBuffer比String在效率上的優越的。
如果要對一個字符串進行多次連接操作,大多數情況下,初學者會使用“+”,而程序員會選用StringBuffer的append方法。