ReferenceEqualsWorksWrongString为什么对象的ReferenceEquals方法在这种情况下表现不同?字符串a="fg";字符串b="fg";Console.WriteLine(object.ReferenceEquals(a,b));所以在这种情况下它是真的。如果它按值而不是按引用比较我的字符串。但是当我写这样的东西时:StringBuilderc=newStringBuilder("fg");字符串d=c.ToString();Console.WriteLine(object.ReferenceEquals(a,d));在这种情况下它工作正常,结果是错误的,因为它比较了我对象的引用。第一个示例有一个编译时常量“fg”,由两个变量引用。因为这是一个编译时常量,所以这两个变量引用一个对象。参考是平等的。有关此行为的更多信息,请阅读有关字符串实习的主题。作为初学者,请考虑:例如,如果将相同的文字字符串分配给多个变量,则运行时将从内部池中检索对文字字符串的相同引用并将其分配给每个变量。http://msdn.microsoft.com/en-us/library/system.string.intern.aspx在第二个例子中,只有一个是编译时常量,另一个是一些操作的结果。a和d不引用同一个对象,因此您从ReferenceEquals得到错误的结果。它在这两种情况下都表现良好。a和b是同一个字符串对象的原因是因为编译器已经注意到你两次指定了同一个字符串,并重新使用同一个字符串对象来初始化a和b。这通常发生在应用程序中的每个字符串常量上。由于您引用的是相同的文字(“fg”),因此您的字符串实际上都指向相同的字符。看看这篇文章:http://csharpindepth.com/Articles/General/Strings.aspx(“实习”段落)。此致Piotr根据这篇文章,它与实习有关。a和b在你的例子中是指向同一个实例的两个变量,这就是ReferenceEquals返回true的原因。以上就是C#学习教程的全部内容:ReferenceEquals工作错误字符串分享。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权请点击右侧联系管理员删除。如需转载请注明出处:
