提问者:小点点

为什么C#比较对象的方式与Java不同?


在C#中,您可以将字符串与a==baequals(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==bfalse,因为它不是同一个对象,但是在C#中它是不同的。 为什么?


共1个答案

匿名用户

Java正在比较字符串的引用,而不是字符串本身。 除非这两个字符串被插入,否则答案将始终是false

请改用string.equals()

当您将两个字符串与==进行比较时,C#会自动为您调用String.Equals()。 为什么? 因为设计师就是这么决定的。 比较字符串引用很少有用。

您可以在String类的源代码705行中找到==的这个实现。 它是一个简单的运算符重载:

public static bool operator == (String a, String b) {
   return String.Equals(a, b);
}

因为String类是密封的,所以您不能重新定义这个运算符来表示字符串的任何其他含义。