Home [C# 筆記] string 可以看做是唯讀的char[]
Post
Cancel

[C# 筆記] string 可以看做是唯讀的char[]

string 字串的特性

  1. 字串的不可變
    • 當你給字串賦值的時候,舊的資料並不會銷毀,而是在Heap堆積重新開辟一塊空間儲存新值。
    • 當程式結束後,GC掃描整個內存,如果發現有的空間沒有被指向,則立即把它銷銷。
  2. 可以把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

This post is licensed under CC BY 4.0 by the author.