可能重复:
Please tell why two references are same for string object in case of string(Code written below)缺省情况下,==运算符是如何工作的?
当我写在C#s1 == s2
其中两个声明为String的编译器会比较引用或内容?即如果==
被替换为string
类?
我只是想知道为什么这个代码打印“真”:
string s1 = "hello"
string s2 = s1 + " ";
s2 = s2.Trim(); // i expect new object here
Console.WriteLine(s2 == s1);
而且我有一些第三方来源,其中==
通常用于字符串比较。这让我发疯,因为我几乎从不使用==
比较Java中的字符串,现在我无法理解这段代码是如何工作的。
使用==
比较C#中的字符串是否正常?
upd:感谢所有人,几乎所有的答案都是正确的。 总之:
- 是的,它使用“==”在C#中比较字符串
- 字符串是正常的将内容进行比较(不参考)
- 字符串==操作符不虚。
- 字符串在C#中是不可变的(这类似于Java)
此行为是对Java不同,其中“==”为String类比较引用。
也Why strings does not compare references?
看到我个人认为语言不应该允许覆盖或过载==操作符,因为它使得像C++ :)
由于.NET处理字符串实习的方式,通过内存位置比较字符串往往会产生意外的结果。我可以想象这是与Java的主要区别(Java是否会串入实际内存?) – MattDavey 2011-04-14 10:10:24