c#字符串池引用

时间:2016-03-13 00:16:14

标签: c# string reference string-pool

如果我有两个具有相同值的字符串,它们应该具有相同的引用,对吧?

这是我的情况:

string s1 = "aaa";
string s2 = "aaa";
Console.WriteLine(" s1: {0}; s2: {1}; equals: {2}", s1,s2, ReferenceEquals(s1, s2));
  

打印:s1:aaa; s2:aaa;等于:真实

但请看一下这段代码:

string s1 = "aaa";
string s2 = new string(s1.ToCharArray());
Console.WriteLine(" s1: {0}; s2: {1}; equals: {2}", s1,s2, ReferenceEquals(s1, s2));
  

打印:s1:aaa; s2:aaa;等于:错误

为什么在第二种情况下,ReferenceEquals返回false?

1 个答案:

答案 0 :(得分:-1)

我找到了答案:只有文字字符串保存在实习池中

实习文字字符串在运行时很便宜并节省了内存。实时非文字字符串在运行时很昂贵,因此可以节省少量内存,以便使常见情况慢得多。

运行时实习字符串的成本"优化"不支付利益,因此实际上不是优化。实习文字字符串的成本很低,因此确实可以带来好处。