为什么字符串不能比较引用?

Coc*_*ilo 8 c# string reference operators

我知道这是特例,但是为什么==如果它们的值等于字符串,则返回字符串,而不是当它们的引用等于时.它与重载运算符有关吗?

Joe*_*oey 14

==实际上,运算符被重载String以执行值相等而不是引用相等.我们的想法是让字符串对程序员更友好,并避免在使用引用相等性来比较它们时出现的错误(在Java中并不常见,特别是对于初学者而言).

到目前为止,我从来没有需要通过引用比较字符串,说实话.如果你需要这样做,你可以使用object.ReferenceEquals().

  • @Jim:老实说,我很惊讶这还没有成为一种通用的语言特性:你需要*总是*与`=='的值相等,同时需要一个特殊的运算符/方法来引用相等而不是另一个四处走走.通常我发现自己比引用更频繁地比较值(除非我明确地处理引用). (4认同)
  • 确切地说+1."对程序员更友好." 我们没有在C#中使用指针.我们希望能够编写,例如,`if(name =="jim")`而不是`if(name.ValueEquals("jim"))`. (3认同)

TTo*_*oni 5

因为字符串是不可变的,并且运行时可以选择将具有相同内容的任何两个字符串放在同一个引用中.所以参考比较字符串并没有任何意义.


nos*_*nos 2

在字符串上,== 按值进行比较

“虽然字符串是引用类型,但相等运算符(== 和 !=)被定义为比较字符串对象的值,而不是引用(7.9.7 字符串相等运算符)。这使得字符串相等性测试更加直观。”

简而言之,字符串上的 == 按值比较字符串,而不是按引用比较字符串,因为 C# 规范规定它应该这样做。