【发布时间】:2011-08-13 08:41:10
【问题描述】:
大家好。
曾经有人告诉我,你不应该用 == 比较字符串,你应该使用 string.equals(),但它指的是 java。
¿.NET c# 中 == 和 string.equals 的区别是什么?
【问题讨论】:
标签: c# .net equals-operator
大家好。
曾经有人告诉我,你不应该用 == 比较字符串,你应该使用 string.equals(),但它指的是 java。
¿.NET c# 中 == 和 string.equals 的区别是什么?
【问题讨论】:
标签: c# .net equals-operator
string == string 与String.Equals 完全相同。这是确切的代码(来自 Reflector):
public static bool operator ==(string a, string b)
{
return Equals(a, b); // Is String.Equals as this method is inside String
}
【讨论】:
在 C# 中没有区别,因为运算符 == 和 != 已在字符串类型中重载以调用 equals()。看到这个MSDN page。
【讨论】:
== 实际上最终会在字符串上执行 String.Equals。
您可以在使用 String.Equals 时指定一个 StringComparision....
例子:
MyString.Equals("TestString", StringComparison.InvariantCultureIgnoreCase)
大多数情况下,我认为这是一种编码偏好。使用您喜欢的任何一个。
【讨论】:
查看here 以获得更好的描述。正如一个答案所述
当 == 用于对象类型时,它会解析为 System.Object.ReferenceEquals。
Equals 只是一个虚方法 行为如此,因此被覆盖 将使用版本(其中,对于 字符串类型比较内容)。
【讨论】:
== 运算符调用String.Equals 方法。所以充其量你正在保存一个方法调用。反编译代码:
public static bool operator ==(string a, string b)
{
return string.Equals(a, b);
}
【讨论】:
没有区别,它只是一个运算符重载。对于字符串,它在内部是一样的。 但是,您不想养成使用 == 来比较对象的习惯,这就是为什么不建议将它也用于字符串的原因。
【讨论】:
在 C# 中,字符串没有区别。
【讨论】:
如果您不关心字符串的大小写,也不担心文化意识,那么它是一样的......
【讨论】: