程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C#系列之String和StringBuilder

C#系列之String和StringBuilder

編輯:C#入門知識

前言         首先和博園的各位打聲招呼,小弟在博園呆了也有一年多了。平常一有時間就會過來看看文章,學習各位的經驗,現在養成了一種一天不來博園,心裡就不踏實的習慣,不知道在看我博文的大哥們有沒有這個感覺。         讀歸讀,理解歸理解,所以我現在想把平常所看的,所讀的轉成自己的理解,記錄下來,以便與各位同行們討論討論。如果在我博文裡有理解錯誤的,或者沒有充分理解的請大膽指出,小弟先在這裡拜謝各位了。     客套話就說到這,下面開始今天的內容。   字符串   System.String類   System.Text.StringBuilder類   String     string是各位用的最多的類型之一,是一個特殊的引用類型,直接派生於Object,因此它的值儲存在托管堆上。構造一個新字符串的時候,不需要用new。       復制代碼 using System; class Program {     static void Main(string[] args)     {         string s = "This is right";//這是正確的         Console.WriteLine(s);           string b = new String("This is error");//這是錯誤的         Console.WriteLine(b);     } } 復制代碼       它是”不可變的“。初始化字符串對象後,該字符串對象的長度、內容都是確定不變的了。這個時候,我們需要更改或者添加字符串,會做一個怎樣的動作呢?假如會有這一段代碼   復制代碼 using System; class Program {     static void Main(string[] args)     {         string s = "I am ";         s += "Sky";         Console.WriteLine(s);//我叫Sky     } } 復制代碼       1、創建一個新的字符串對象b,運行庫會為新對象b分配足夠的內存,儲存新內容“I am Sky”。     2、變量 s重新指向新對象b。     3、舊對象a沒有被任何變量引用,等待垃圾回收。                 由於上面的特性,避免復制同一個字符串的多個對象,會利用CLR的字符串留用機制,減少內存的損耗。     什麼是字符串留用,CLR初始化的時候會創建哈希表,每構建一個新字符串都會與哈希表匹配,查找是否有相同的字符串,如果匹配,就會返回這個已存在的舊對象,由新變量進行引用。否則,就會創建一個字符串副本添加到哈希表裡,Key就是字符串,Value就是string對象在堆上的地址。               StringBuilder     因為string的”不可變“,導致多次修改字符串的時候會損耗性能,那麼這個時候StringBuilder的作用就來了。StringBuilder和String比起來,功能較少,只有基本的屬性和增刪改的方法。     其實,StringBuilder是由Char數組構成的。構建新的StringBuilder時能設置容量大小,當添加字符串,超過已分配的數組大小時,就會創建一個新的數組,此時容量會翻倍,舊的數據就會等待垃圾回收。     StringBuilder多數方法都是返回同一個StringBuilder對象,那麼這個時候就可以,幾個操作一起完成。   復制代碼 using System; using System.Text; class Program {     static void Main(string[] args)     {         StringBuilder sb = new StringBuilder(10);         string s = sb.AppendFormat("{0} {1}", "Skyer", "Chen").Remove(3,2).Replace(' ','-').ToString();         Console.WriteLine(s);//顯示結果 Sky-Chen     } } 復制代碼

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved