C# 中 Equals 与 == 的区别
|
admin
2026年9月4日 18:16
本文热度 10
|
`==`为运算符,编译时编译器确定比较值还是比较地址(如果将一个值类型和引用类型相互比较,编译器会报错,编译不通过)。
`Equals`为方法,object 基类中定义了`Equals`的虚方法。可能在其它类型中进行重写。在运行时才会执行`Equals`方法。具体调用`Equals`哪个实现,运行时才能知道。
所以,在某些场景下,`==`和`Equals`会存在差异。
object a = 1;object b = 1;Console.WriteLine(a == b);Console.WriteLine(a.Equals(b));
False True
object a = 1;object b = null;Console.WriteLine(a == b);Console.WriteLine(a.Equals(b));
FalseFalse
object a = null;object b = null;Console.WriteLine(a == b);Console.WriteLine(a.Equals(b));
TrueUnhandled exception. System.NullReferenceException
float a = 1;int b = 1;Console.WriteLine(a.Equals(b));Console.WriteLine(b.Equals(a));
//输出TrueFalse
double a = double.NaN;double b = double.NaN;Console.WriteLine(a == b);Console.WriteLine(a.Equals(b));
FalseTrue
T Compare<T>(T a, T b){ a.Equals(b); }
综上所述,为了安全起见在能用`==`的地方尽可能用`==`
该文章在 2026/9/4 18:16:28 编辑过