string是特殊的引用型別,特殊在何處

2021-06-01 04:45:35 字數 504 閱讀 3644

對於string這個引用型別是非常特殊乙個引用型別。 它有兩點特殊的地方。

第一點物件分配的特殊。

例如:string str1 = "abcd"; string str2 = "abcd";

那麼.net在分配string型別的時候,先檢視當前string型別列表是否有相同的,如果有的話,直接返回其的引用,否則重新分配。

第二點物件引用操作的特殊,可以說不同於真正意義上的引用操作。

例如:string str1 = "abcd"; string str2 = str1; str2 = "efgh";// str1 is still "abcd" here

當對於乙個新的string型別是原有物件引用的時候,這點和一般的引用型別一樣,但是當新的物件發生變化的時候,要重新分配乙個新的地方,然後修改物件指向。 因此對於string操作的時候,尤其發生變化的時候,會顯得比較慢,因為其牽扯到記憶體位址的變化。

對於資料量比較大的字元操作時候,使用stringbuilder來說效率會提公升很高。

為什麼string是引用型別

在c 中分為值型別和引用型別,值型別為int float bool char struct等簡單資料型別,引用型別有stirng,class。然而string的身為引用型別卻表現得與值型別十分相同。為什麼string為引用型別呢?首先明白string指向常量空間的位址。如果我們有乙個字串 strin...

關於string是值型別還是引用型別

當然了,string本質上肯定是引用型別,但是這個特殊的類卻表現出值型別的特點 判斷相等性時,是按照內容來判斷的,而不是位址 它肯定是乙個引用型別沒錯,兩個方面來看 1.class string繼承自object,而不是system.valuetype int32這樣的則是繼承於system.val...

關於string是值型別還是引用型別

當然了,string本質上肯定是引用型別,但是這個特殊的類卻表現出值型別的特點 判斷相等性時,是按照內容來判斷的,而不是位址 它肯定是乙個引用型別沒錯,兩個方面來看 1.class string繼承自object,而不是system.valuetype int32這樣的則是繼承於system.val...