string first="Example";
string second="Example";
两个字符串都具有相同的哈希码,并且两个引用都相同。
我的问题是:这些字符串变量在内存位置中是否只有一个数据副本?
string third="Example";
static string fourth="Example";
const string fifth="Example";
上述两组之间有什么区别吗?
答案 0 :(得分:4)
在此特定示例中,所有字符串都是与单个string
对象不同的引用,具有相同的值。这是因为ldstr
IL指令实例化文字字符串并重用它们而不是按ldstr
分配。
您可以使用ReferenceEquals(first, second)
等
请注意,const
一个稍微有点兴趣,因为它会在调用网站处变成文字ldstr
,以及如何共享实习可能取决于在装配边界上。
但是:所有 "Example"
都必须是同一个引用。获取字符串的大多数其他机制(来自处理输入数据)将不查看实习数据,但只会构造一个新字符串。