大話string

    最近看完大話string之後深有感悟,雖然寫c#不知不覺的已經寫了四年了,但是很多原理也一直不太明白,最近看完這個纔算略微明白了一些。

string類型有2個重要的特性,一致性和駐留性。

    一致性就是說一個字符串一旦創建之後就會在內存的堆棧中開闢一塊連續的空間,所以是不可修改的,如果對字符串修改的話,其實是創建了一個新的字符串,

然後舊的字符串沒有被引用之後就會被gc回收掉。

string a="hello";
a+="wolrd";

此時字符串a在內存中的地址已經發生了改變。

     一致性我之前也略微知道一些,我 估計大家也都會知道,但駐留性我之前倒是很少聽過,駐留性說的是相同的字符串不會在堆棧中重複創建,會使用同一個引用地址,這也是引用類型的一大特點。因爲clr有一個駐留表已鍵值對的形式保存着字符串的引用,每次會在這裏查詢。

string a="hello world";
string b="hello world";

在創建b的時候會在駐留表中查找值爲hello world的key,如果有的話,將不會新建對象,而是指向已有對象。

但是這種情況就不會

string a="hello world";
string b="hello";
b=" world";

這裏的a和b指向的就是不同的內存引用,因爲動態修改後的字符串駐留表是無法保存的,除非指定保存纔可以。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章