可能重复:
C#: String.Equals vs. ==
Are string.Equals() and == operator really same?
有时在两个字符串之间的条件下,我写道:
if(string1==string2) //Do something
有时我会写:
if(string1.Equals(string2)) //Do something
问题有时是第一个不起作用,或者是错误的,两个表达式之间有什么区别吗?
答案 0 :(得分:10)
只要两个操作数的编译时类型为string
,第一个将始终工作。
如果任一操作数的编译时类型不是string
,它将使用正常的引用标识比较,而不是比较字符串是否相等。基本上,您希望调用==(string, string)
重载而不是正常的==(object, object)
重载。
请注意,即使string1
为空,第一个将成功,而在这种情况下,第二个将抛出NullReferenceException
。另一种方法是保留Equals
电话,但要避免此问题,请致电static object.Equals(object, object)
method:
if (object.Equals(string1, string2))
我个人在编译时类型合适的情况下只使用==
。
答案 1 :(得分:-1)
在两个字符串类型上使用==
将执行引用标识检查,这意味着如果两个引用都指向同一个对象,它将仅返回true。另一方面,Equals
应执行值比较,如果引用指向等效的对象,则返回true。