Chu*_*ris 8 c# string equals referenceequals
为什么在这种情况ReferenceEquals下对象的方法表现不同?
string a= "fg";
string b= "fg";
Console.WriteLine(object.ReferenceEquals(a, b));
Run Code Online (Sandbox Code Playgroud)
所以在这种情况下,它会得到一个结果true.如果是,它会比较我的字符串的值而不是引用.但是当我写下这样的话:
StringBuilder c = new StringBuilder("fg");
string d = c.ToString();
Console.WriteLine(object.ReferenceEquals(a, d));
Run Code Online (Sandbox Code Playgroud)
在这种情况下,它工作正常,结果是false,因为它比较我的对象的引用.
Ant*_*ram 15
第一个示例具有"fg"由两个变量引用的编译时常量.由于这是一个编译时常量,因此这两个变量引用了一个对象.参考是平等的.
有关此行为的更多信息,请阅读字符串实习的主题.作为首发,请考虑:
例如,如果将相同的文字字符串分配给多个变量,则运行时将从实习池中检索对文字字符串的相同引用,并将其分配给每个变量.
http://msdn.microsoft.com/en-us/library/system.string.intern.aspx
在第二个示例中,只有一个是编译时常量,另一个是某些操作的结果.a并且d不要引用同一个对象,所以你得到了错误的结果ReferenceEquals.