在C#中,您可以将字符串与a==b
和aequals(b)
进行比较。 示例如下:
string a = new string("foo");
string b = new string("foo");
Console.WriteLine(a == b); // Output: True
Console.WriteLine(a.Equals(b)); // Output: True
然而,在Java却不同:
String a = new String("foo");
String b = new String("foo");
System.out.println(a == b); // Output: False
System.out.println(a.equals(b)); // Output: True
我知道在Javaa==b
是false
,因为它不是同一个对象,但是在C#中它是不同的。 为什么?
Java正在比较字符串的引用,而不是字符串本身。 除非这两个字符串被插入,否则答案将始终是false
。
请改用string.equals()
。
当您将两个字符串与==
进行比较时,C#会自动为您调用String.Equals()
。 为什么? 因为设计师就是这么决定的。 比较字符串引用很少有用。
您可以在String类的源代码705行中找到==
的这个实现。 它是一个简单的运算符重载:
public static bool operator == (String a, String b) {
return String.Equals(a, b);
}
因为String类是密封的,所以您不能重新定义这个运算符来表示字符串的任何其他含义。