2015-11-18 14 views
1

考慮下面的代碼在C#多個容器相同的字符串:在C#中,確實在指向同一個位置

String a = "hello world"; 
List<String> ListA = new List<String>(); 
List<String> ListB = new List<String>(); 
ListA.Add(a); 
ListB.Add(a); 

我的問題是:在這兩個列表中的兩個字符串實際上是指向同在內存中的位置?換句話說,對於同一個字符串有多個容器的附加內存僅僅是關於引用(指針)而不是字符串的實際內存?

謝謝。

+0

[string.Intern](https://msdn.microsoft.com/en-us/library/system.string.intern(v = vs.110).aspx) – Steve

回答

3

在你的代碼,a是一個字符串的引用。向兩個列表添加相同的引用將引用相同的內存位置。

0

我的問題是:兩個列表中的兩個字符串實際上是否指向內存中的相同位置?

是的,他們是。事實上,你添加了相同的字符串兩次,現在兩個列表都有一個引用它並沒有改變這個事實,這個字符串只有一個實例。

另一個因素是你正在創建一個字符串字面值,它將被實現到字符串池中。這將使任何其他創建相同的字符串重新使用已分配的字符串,而不是分配一個新的字符串。

string.Intern文檔:

公共語言運行庫通過維護表節省字符串存儲,叫實習生池,包含一個單一的參考聲明或程序中的程序創建的每一個獨特的文本字符串。因此,具有特定值的文字串的實例僅在系統中存在一次。

相關問題