首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ReferenceEquals处理字符串时出现错误

ReferenceEquals处理字符串时出现错误
EN

Stack Overflow用户
提问于 2012-02-02 20:50:59
回答 5查看 2.9K关注 0票数 9

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

代码语言:javascript
复制
string a= "fg";
string b= "fg";
Console.WriteLine(object.ReferenceEquals(a, b));

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

代码语言:javascript
复制
StringBuilder c = new StringBuilder("fg");
string d = c.ToString();
Console.WriteLine(object.ReferenceEquals(a, d));

在这种情况下,它工作得很好,结果是false,因为它比较了我的对象的引用。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-02-02 20:54:19

第一个示例有一个由两个变量引用的编译时间常数"fg"。因为这是一个编译时间常量,所以两个变量引用一个对象。引用是相等的。

有关此行为的更多信息,请阅读string interning主题。作为初学者,请考虑:

例如,如果将相同的文字字符串分配给多个变量,则运行时将从intern池中检索对文字字符串的相同引用,并将其分配给每个变量。

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

在第二个示例中,只有一个是编译时间常量,另一个是某些操作的结果。ad不引用相同的对象,因此从ReferenceEquals得到的结果为假。

票数 17
EN

Stack Overflow用户

发布于 2012-02-02 20:54:56

它在这两种情况下都运行正常。

ab是相同的string对象的原因是,编译器已经注意到您指定了相同的string两次,并且重用了相同的string对象来初始化ab

这通常会发生在应用程序中的每个字符串常量中。

票数 3
EN

Stack Overflow用户

发布于 2012-02-02 20:57:14

由于您引用了相同的文字("fg"),因此两个字符串实际上将指向相同的内容。请看这篇文章:http://csharpindepth.com/Articles/General/Strings.aspx (“实习”一段)。

问候你,Piotr

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9112610

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档