如何将两个具有相同值的字符串存储在内存中?

时间:2016-07-21 12:01:55

标签: c#

string first="Example";
string second="Example";

两个字符串都具有相同的哈希码,并且两个引用都相同。

我的问题是:这些字符串变量在内存位置中是否只有一个数据副本?

string third="Example";
static string fourth="Example";
const string fifth="Example";

上述两组之间有什么区别吗?

1 个答案:

答案 0 :(得分:4)

在此特定示例中,所有字符串都是与单个string对象不同的引用,具有相同的值。这是因为ldstr IL指令实例化文字字符串并重用它们而不是按ldstr分配。

您可以使用ReferenceEquals(first, second)

进行检查

请注意,const一个稍微有点兴趣,因为它会在调用网站处变成文字ldstr ,以及如何共享实习可能取决于在装配边界上。

但是:所有 "Example"都必须是同一个引用。获取字符串的大多数其他机制(来自处理输入数据)将查看实习数据,但只会构造一个新字符串。