C# StringBuilder和string

1.string是引用類型還是值類型

MSDN官方說string是引用類型;

  • 引用類型:引用分配棧內存,引用類型本身的數據存儲在堆中;
  • 值類型:在函數中創建,棧內存;類中成員變量堆類型;

從c底層內存分析,string本質是char*數組;

char*不開堆,直接“ ”賦值存儲在常量內存區;

常量內存區在程序結束後由系統統一釋放;

string賦值和char*一樣,直接存儲在常量內存;

因此一個string重新賦值並不是修改引用指向,而是在常量內存去重新指向一個新的字符串,這個操作相當於重新創建瞭實例,性能不好;

2.StringBuilder

StringBuilder相當於char* a = new char[lenth];

開瞭一塊堆內存專門存儲字符串數據;

StringBuilder在創建對象時,可指定內存大小;

StringBuilder mStringBuilder = new StringBuilder("LittlePreilla",30);


當內存超出時,StringBuilder會自動將內存加倍;

mStringBuilder.Capacity = 10;  //設置內存
mStringBuilder.EnsureCapacity(10); //檢查內存,大於10不變,小於10改為10

3.StringBuilder使用

1)拼接

mStringBuilder.Append("aaa");
mStringBuilder.AppendFormat("aaa{0:D}",1012);


字符 說明 示例 輸出
C 貨幣 string.Format(“{0:C3}”, 2) $2.000
D 十進制 string.Format(“{0:D3}”, 2) 002
E 科學計數法 string.Format(“{0:e}”,1.2) 1.20E+001
G 常規 string.Format(“{0:G}”, 2) 2
N 用分號隔開的數字 string.Format(“{0:N}”, 250000) 250,000.00
X 十六進制 string.Format(“{0:X000}”, 12) C
string.Format(“{0:000.000}”, 12.2) 012.200

2)插入

mStringBuilder.Insert(1,"ddd");  //index下表位置   

3)移除

mStringBuilder.Remove(1,2);  //index下表位置開始,移除幾位

4)替換

mStringBuilder.Replace("aaa","bbb");  
我個人格式化輸出更喜歡用正則表達式,也非常方便;

int a = 10;
string str = $"aaa{10}bbbb";
//結果為 aaa10bbbb

到此這篇關於C# StringBuilderstring的文章就介紹到這瞭,更多相關 StringBuilderstring內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: