缺省情况下,==运算符是如何工作的?
可能重复:
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++ :)
运算符不能被覆盖多态,但它们可以是重载这是字符串的情况。重载检查内容是否平等(以序号方式,没有文化敏感性)。因此,举例来说:
string s1 = "hello";
string s2 = (s1 + " ").Trim();
object o1 = s1;
object o2 = s2;
Console.WriteLine(s1 == s2); // True - calls overloaded ==(string, string)
Console.WriteLine(o1 == o2); // False - compares by reference
注意这是怎么一模一样对象运行,但由于超负荷分辨率为编译时进行,在第二种情况下,编译器不知道叫字符串特定的运算符。
是,默认情况下,当你使用它作为困难==它参考equiality检查,但它重写为字符串,以便它检查的内容(因为字符串是不可变的为好)
This is great article that I like(兼作家乔恩是在这里也:))
即使ŧ hough System.String类是一个引用类型('string'是别名)==类型的操作方法被重写,以提供字符串类型内容之间的比较。
它们在你的例子中是相等的,因为字符串类型的内容是相同的。
s2 == s1会给你一个布尔结果,是的。至于.NET编程,我总是发现使用String.Compare更好。
是的,将C#中的字符串与==
进行比较是正常的(但不一定是好的做法)。 String.Compare
是一种比较可靠的比较方式,它也可以处理不同的字符集和区分大小写。
由于.NET处理字符串实习的方式,通过内存位置比较字符串往往会产生意外的结果。我可以想象这是与Java的主要区别(Java是否会串入实际内存?) – MattDavey 2011-04-14 10:10:24