string 物件是不可改變的。每次使用 system.string 類中的方法之一時,都要在記憶體中建立乙個新的字串物件,這就需要為該新物件分配新的空間。
例如: string a="a";a+="b";,每次在後面追加都會重新申請乙個能放字串的記憶體空間;
string interning(字串駐留)指的是通過維護一張表來存放字串。clr內部維護了乙個雜湊表(hash table)來管理其建立的大部分string物件,其中key為string本身,而value為分配給對應string的記憶體位址。
public static string intern(string str);
public static string isinterned(string str);
兩者的處理機制都是在雜湊表中查詢是否存在str引數字串,如果找到就返回已存在的string物件的引用,沒有找到,intern方法將該str字串新增到雜湊表,並返回引用;而isinterned方法則不會向雜湊表中新增字串,而是返回null;
stringbuilder 物件是動態物件,允許擴充它所封裝的字串中字元的數量,但是您可以為它可容納的最大字元數指定乙個值,
當修改 stringbuilder 時,在達到容量之前,它不會為其自己重新分配空間。當達到容量時,將自動分配新的空間且容量翻倍。可以使用過載的建構函式之一來指定 stringbuilder 類的容量。
兩者的區別:
1. string 物件時恆定不變的,stringbuider物件表示的字串是可變的。stringbuilder是.net提供的動態建立string的高效方式,以克服string物件恆定性帶來的效能影響。
2. 對於簡單的字串連線操作,在效能上stringbuilder並不一定總是優於string。因為stringbuider物件建立代價較大,在字串目標連線較少的情況下,過度濫用stringbuilder會導致效能的浪費,只有大量的或者無法預知次數的字串操作,才考慮stringbuilder來實現。事實上,一般連線次數設定100次以內,根本看不出兩者的效能差別。
3. 當修改字串資訊時,此時不許建立物件,可以使用stringbuilder物件。
String與string的區別
1 string是乙個類,string是一種資料型別.2 string是c 中的類,string是.net framework的類 在c ide中不會顯示藍色 3 c string對映為.net framework的string 4 如果用string,編譯器會把它編譯成string,所以如果直接用...
string與string標頭檔案
先來段 我是在vs2012上實驗的 include stdafx.h include include include using namespace std int tmain int argc,tchar argv cout endl for rit mapstudent.rbegin rit m...
String與string的區別
c 是區分大小寫的,但是我卻發現c 中同時存在string與string,於是我很困惑,於是我上網搜尋了一下,於是我了解了一些小知識。msdn中對string的說明 stringis analiasforstringin the net framework。string是string的別名而已,st...