string first="Example";
string second="Example";
Run Code Online (Sandbox Code Playgroud)
两个字符串具有相同的哈希码并且两个引用相同。
我的问题是:这些字符串变量在内存位置中是否有单个数据副本?
string third="Example";
static string fourth="Example";
const string fifth="Example";
Run Code Online (Sandbox Code Playgroud)
以上两套有区别吗?
在这个特定示例中,所有字符串都是对单个对象具有相同值的不同引用string。这是因为ldstrIL 指令实习文字字符串并重用它们而不是分配 per ldstr。
你可以用ReferenceEquals(first, second)等检查这个。
请注意,这个const稍微更有趣,因为它然后ldstr 在 call-site变成文字,并且如何共享实习可能取决于程序集边界。
但是:并不是所有的都 "Example"必须是相同的参考。大多数其他获取字符串的机制(通过处理输入数据)不会查看内部数据,而只会构造一个新字符串。
| 归档时间: |
|
| 查看次数: |
943 次 |
| 最近记录: |