開發過程中常用到的拼接字符串的方法有三種:
1 簡單 “+=” 拼接法
string str="a"; str+="c"+"d"; string str_1="a"+"b";
首先需要明白的是string類型,string是引用類型,保留在堆上,而不是棧上,用的時候傳的是內存中的地址,每次修改就會重新創建一個新的string對象來存儲字符串,原有的會被自動回收。
第一種方式的實現原理,第一步先在內存中分配空間,存儲str變量的對象,值為"a", “+=”時,又會重新創建一個對象來存儲新的字符串(“abc"),把str指向這個新的地址。所以只有簡單幾步的拼寫時,一般不會有太大問題,如果有時候需要循環拼接時,就會不斷創建新的對象,很浪費性能和內存。
2 String.Format()
string str= String.Format("{0}{1}{2}","a","b","c");
這就需要先看看他的源代碼了,
public static String Format(IFormatProvider provider, String format, params Object[] args)
{ if (format == null || args == null) throw new ArgumentNullException((format==null)?"format":"args"); StringBuilder sb = new StringBuilder(format.Length + args.Length * 8); sb.AppendFormat(provider,format,args); return sb.ToString(); }
可以看到是先創建一個StringBuilder類型的變量,長度為第一個參數的長度+參數長度的8倍。.Net自動分配一個比較大的容量來存儲。StringBuilder的介紹請看第3種方法.
這種方式的代碼看起來比較整潔,易於月度,效率也比+=高效很多。
3 StringBuilder.Append
StringBuilder str=new StringBuilder();
str.Append("a");
StringBuilder 是預先創建一個比較大的內存,以后每次操作時判斷容量上限是否不夠用,如果不夠用就自動把容量擴大一倍,修改的還是第一次創建的對象的值。
如果是簡單的拼寫時,可以用 "+=", string.format
循環內拼寫很長的字符串時,就需要用到StringBuilder來節省性能和內存了。
