gpt4 book ai didi

c# - ReferenceEquals 在处理字符串时出错

转载 作者:太空狗 更新时间:2023-10-29 18:13:40 27 4
gpt4 key购买 nike

为什么在这种情况下对象的 ReferenceEquals 方法表现不同?

string a= "fg";
string b= "fg";
Console.WriteLine(object.ReferenceEquals(a, b));

所以在这种情况下它得到一个结果 true。以防万一,它比较我的字符串的值而不是引用。但是当我写下类似的东西时:

StringBuilder c = new StringBuilder("fg");
string d = c.ToString();
Console.WriteLine(object.ReferenceEquals(a, d));

在这种情况下,它工作正常并且结果为 false,因为它比较了我的对象的引用。

最佳答案

第一个示例有一个编译时常量 “fg”,它被两个变量引用。因为这是一个编译时常量,所以这两个变量引用同一个对象。引用是相等的。

阅读 string interning 主题以了解有关此行为的更多信息。首先,请考虑:

For example, if you assign the same literal string to several variables, the runtime retrieves the same reference to the literal string from the intern pool and assigns it to each variable.

http://msdn.microsoft.com/en-us/library/system.string.intern.aspx

在第二个例子中,只有一个是编译时常量,另一个是一些操作的结果。 ad 不引用同一个对象,因此您从 ReferenceEquals 得到错误的结果。

关于c# - ReferenceEquals 在处理字符串时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9112610/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com