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

标签 c#

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/

相关文章:

c# - linq表达式作为参数

c# - 在 C# 中存储方法列表

c# - 加载字节数组程序集

c# - DI 到 ASP.NET MVC 6 中的需求/策略

c# - Facebook 情绪分析 API

c# - 使用 C# 在签名中添加 LTV 会使 pdf 无效

c# - 引用组合框中的值时 LINQ 查询出错

c# - 如何在运行时销毁多个游戏对象?

c# - 内存不足异常

c# - WP7 上是否有使用 ECB 密码和 PCKS5 填充的 AES 加密库