为什么在这种情况下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"
由两个变量引用。由于这是一个编译时常量,因此这两个变量引用同一个对象。参考文献是相等的。
阅读主题字符串实习有关此行为的更多信息。作为初学者,请考虑:
例如,如果将相同的文字字符串分配给多个变量,运行时将从内部池中检索对文字字符串的相同引用并将其分配给每个变量。
http://msdn.microsoft.com/en-us/library/system.string.intern.aspx http://msdn.microsoft.com/en-us/library/system.string.intern.aspx
在第二个示例中,只有一个是编译时常量,另一个是某些操作的结果。a
and d
不引用同一个对象,因此您会得到错误的结果ReferenceEquals
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)