为什么== for String变量返回true?

R.C*_*R.C 0 .net asp.net c#-4.0

参考这个问题为什么下面的代码总是返回true?[c#语言]

String a= "hello";
String b= "hello";
if(a==b)
Console.WriteLine("Is it really reference type?");
Run Code Online (Sandbox Code Playgroud)

只想要解释为什么在这里它们表现为值类型而不是引用类型.是否有关于此OR的MSDN文档或者我应该记住这个异常或者这是完全合乎逻辑的但是我没有得到它?

详细解释赞赏.

Kna*_*ģis 12

任何类都可以覆盖==运算符以提供自定义比较.文档.

这就是String类所做的 - 它只是为比较提供了不同的含义 - 它检查字符串值而不是对象引用.

如果您确实想检查实例是否指向相同的引用,请使用 object.ReferenceEquals(a, b)

就字符串而言,在这种情况下它们实际上是相同的引用 - 编译器将检测到字符串值完全相同并且只将它们存储在内存中一次.这里有一些要阅读的内容String.Intern