string 字串的特性
- 字串的不可變
- 當你給字串賦值的時候,舊的資料並不會銷毀,而是在Heap堆積重新開辟一塊空間儲存新值。
- 當程式結束後,GC掃描整個內存,如果發現有的空間沒有被指向,則立即把它銷銷。
- 可以把string類型 看做是唯讀的char[]
ToCharArray()將字串轉換為char[]new string(char[] chs)能夠將char陣列轉換為字串
string看做是唯讀的char[]
為何可以把string類型看做是char類型的唯讀陣列?
因為我們可以通過index去訪問字串中的某一個字元。
為什麼要透過char[]類型去修改?
因為char[]的修改,不會造成字串的變化,就不會在Heap堆積重新開辟一塊空間儲存新值,同時也產生很多內存垃圾。
但,如果有這樣的需求:大量的對string做操作,請使用String Builder
使用index讀字串的一個字元
我們可以通過index去訪問字串中的某一個字元
1
2
3
4
5
//可以把string類型 看做是char類型的一個唯讀陣列,
//既然可以將string看做char類型的唯讀陣列,
//我們就可以通過index去訪問字串中的某一個字元
string s = "abcdefg";
Console.WriteLine(s[0]); //s[0]輸出:a
如果想要給字串s, 更改其中一個元素s[0] = 'b';不能這樣做,因為是它唯讀的,程式就會報錯,程式會提示告訴你它是唯讀的。
如果要改,可以將字串轉成char類型ToCharArray(),更改該元素後,再用new string();轉回字串。
使用ToCharArray()將字串某個值改掉
ToCharArray()將字串轉換為char陣列new string(char[] chs)能夠將char陣列轉換為字串
1
2
3
4
string s = "abcdefg";
char[] chs = s.ToCharArray(); //將字串轉成char類型
chs[0] = 'b'; //更改第一個元素
s = new string(chs); //轉回字串
stack-heap
value-and-reference-type
堆疊(Stack)和堆積(Heap) 還有Boxing與Unboxing觀念釐清
garbage-collection/fundamentals