標籤:stringbuilder stringbuffer string
在看J2SE的時候,再次看到了String這個字眼,其實在C#系統實踐的過程中就多次使用了:
對於String和StringBuilder最大的區別就是可變不可變的問題,其實這個在資料類型中是存在多對對比並行存在的,就比如Char和Varchar的完美對比。
String:
在機房收費系統又或者學生資訊管理系統中,由於整個系統相對來說就是小型化的,所以我們最多就是使用了String類型,來完成我們對於字串的定義。其實String就是一個字串常量,是不可改變的,就Java記憶體分析角度來說,就是每次只要字串的內容發生改變,就必須重新分配記憶體。假設一個有著一個10000次的一個迴圈,每次迭代都重新分配一下,這樣效能低就可想而知。
StringBuilder:
它是在String的完善的基礎上,才被人所使用的。StringBuilder懂得了分配一個緩衝,也就是一個工作區來解決這些問題,當字串大小沒有超過容量時,不會分配新的容量,當超過時,就會自動增加容量,這樣等所有的事情全部執行完成之後,直接提交,則會提高效能。
雖然StringBuilder對象是動態對象,但是擴充所封裝的字串的數量,再此容量不要和之前瞭解的StringBuilder的長度混淆在一起,
For Example:
可以建立一個帶有字串“friends"(長度為7)的例子,如果我指定該對象的最大容量為25,那麼StringBuilder可以將MyStringBuilder的對象擴充到最大25的空白:
StringBuilder MyStringBuilder=new StringBuilder(Hello,My dear Friends!", 25);
最大容量可以這樣來定義:
MyStringBuilder.Capacity =25;
在我們項目中,我們最常用的還是.Append:
StringBuilder StrBuilder=new StringBuilder();StringBuilder.Append(" ");StringBuilder.Append(" ");StringBuilder.Append(" ");StringBuilder.Append(" ");……
這樣使用的好處也是為了提高效能。
在StringBuilder中,常用的幾種方法為:
StringBuilder.Append()。將內容追加到當前StringBuilder字串的結尾。Eg:StringBuilder MySB = new StringBuilder("您好!"); MySB.Append(" 大家好!"); Console.WriteLine(MySB); StringBuilder.AppendFormat()。用一個帶格式文本來代替字串要傳遞的符號。Eg:int MyMoney = 24; StringBuilder MySB = new StringBuilder("欠我的錢是 "); MySB.AppendFormat("{0:C} ", MyMoney); Console.WriteLine(MySB); StringBuilder.Insert(int,string)。將字串和對象插入到當前StringBuilder字串的指定位置。StringBuilder.Remove(p,n)。在當前StringBuilder對象中移除指定的字元,就是說從p位置開始刪除n個字元。StringBuilder.Replace(a,b)。就是用b替換a指定字串,a和b都是字元或字串。Eg: string a="aaa aaa aaa"; string b=a.Replace(‘a’,‘w’); 結果輸出“www www www”。
除了這兩種之外,還有一種就是StringBuffer,和StringBuilder相比來說,最大的優勢就是適用於多線程的情況下,總結一下三者的使用方式:
1)如果操作量少 ---String
2)單線程操作字串緩衝區下操作大量資料 ---StringBuilder
3)多線程操作字串緩衝區下操作大量資料 ---StringBuffer
C#String & StringBuilder