string first="Example";
string second="Example";
两个字符串都有相同的散列码,两个引用也相同。
我的问题是:这些字符串变量在内存位置是否有一个数据副本?
string third="Example";
static string fourth="Example";
const string fifth="Example";
以上两组有什么区别吗?
最佳答案
在这个具体示例中,所有字符串都是具有相同值的不同引用,指向单个string
对象。这是因为 ldstr
IL 指令会保留文字字符串并重新使用它们,而不是按 ldstr
进行分配。
您可以使用 ReferenceEquals(first, second)
等来检查这一点
请注意,const
稍微更有趣一些,因为它随后会在 调用点 变成文字 ldstr
,以及如何实习是否共享取决于程序集边界。
但是:所有 "Example"
必须是相同的引用是不正确的。大多数其他获取字符串(通过处理输入数据)的机制不会查看驻留数据,而只会构造一个新字符串。
关于c# - 两个具有相同值的字符串如何存储在内存中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38503747/