處理文本值是程式員的日常工作,通常用標準的Java String類來完成與文本有關的需求。它對於很多小任務確實很適用,但是如果處理的是大型任務,它會大量消耗系統資源。由於這個原因,JDK引入了StringBuffer類以提供一條處理字串的有效路徑。讓我們來看看怎樣用這個類來提升效能。
為什麼不用標準的String?
Java String對象是常量字串。一旦被初始化和付值,它的值和所分配的記憶體就被固定了。如果硬要改變它的值,將會產生一個包含新值的新String對象。這就是String對象會消耗掉很多資源的原因。下面的代碼建立了一個String對象並使用串聯(+)符號來為它添加更多字元:
String sample1=new String(“Builder.com”);
sample1+=”is”;
sample1+=”the place”;
sample1+=”to be.”;
系統最終會建立四個String對象來完成上面的替換。其中第一個的文本是Builder.com。然後每次添加文本時都會建立一個新的對象。
這種方法的問題在於為了這麼一個簡單的過程而消耗了太多的資源。在這個例子中其影響也許很小(指給出了很少的代碼),但是在一個擁有多得多操作的大型應用程式中這樣做就會使效能下降。StringBuffer類所要解決的正是這個問題。
用StringBuffer處理字串
StringBuffer類被設計用與建立和操作動態字串資訊。為該對象分配的記憶體會自動擴充以容納新增的文本。有三種方法來建立一個新的StringBuffer對象:使用初始化字串、設定大小以及使用預設建構函式:
StringBuffer sb=new StringBuffer();
StringBuffer sb=new StringBuffer(30);
StringBuffer sb=new StringBuffer(“Builder.com”);
第一行建立了不包含任何文本的對象,預設的容量是16個字元。類的第二個執行個體也不包含文本,容量是30個字元,最後一行建立了一個擁有初始化值的對象。StringBuffer類位於java.lang基礎包中,因此要使用它的話不需要特殊的引入語句。
一旦建立了StringBuffer類的對象,就可以使用StringBuffer類的大量方法和屬性。最顯著的方法是append,它將文本添加到當前StringBuffer對象內容的結尾。下面的程式碼範例了append方法的文法:
StringBuffer sb=new StringBuffer();
sb.append(“B”);
sb.append(“u”);
sb.append(“i”);
sb.append(“l”);
sb.append(“d”);
sb.append(“e”);
sb.append(“r”);
sb.append(“.com”);
System.out.println(sb.toString());
這些代碼建立了Builder.com字串並將它送往標準輸出,但是只建立了一個對象。如果使用String對象就需要八個以上的對象。注意代碼利用了StringBuffer類的toString方法。這個方法將其內容轉換成一個可以被用於輸出的字串對象。它允許操作對應的文本用於輸出或資料存放區。
append方法有十種重載形式,允許將各種類型的資料添加到對象的末尾。StringBuffer類還提供了處理對象內部資料的方法。