string類型是C#中一個很特殊的類型。看上去象值類型,事實上確實引用類型。
string中有一個概念是拘留池。了解它更有利於我們更好的使用string類型。
1, 什麼是拘留池?
公共語言運行庫會自動維護一個名為“拘留池”(intern pool) 的表,它包含在程式中聲明的每個唯一字元串常數的單個實例,以及以編程方式添加的 String 的任何唯一實例。
該拘留池節約字元串存儲區。如果將字元串常數分配給幾個變數,則每個變數設定為引用“拘留池”(intern pool) 中的同一常數,而不是引用具有相同值的 String 的幾個不同實例。
此方法在拘留池中查找 str。如果已經將 str 放入拘留池中,則返回對此實例的引用;否則返回空引用(在 Visual Basic 中為 Nothing)。
2, string類型變數值修改後,實際上是在記憶體中新創建了一個空間。而不是在原有值上的修改。
理解了拘留池的概念,對這句話就更好理解。因為一個“中國人”的值可能有多個string類型變數指向該值。
當其中一個變數改變“中國人”為“中國人民”時,公共語言運行庫會重新給“中國人民”分配一塊空間,而不是修改原來的“中國人”。因為修改原來的值會影響其它指向該值的變數。