.Net 【基础回顾】比较比较 Equals ReferenceEquals
对象一致和对象相等
-
对象一致/the same instance:两个对象是一个实例,引用相同
-
对象相等/considered equal:指两个对象的值相同,但引用不一定相同
比较运算符==
-
引用类型,默认是比较引用的
-
值类型默认比较值
-
string 比较值
Object
中的实例方法Equals
-
虚方法,需要子类继承重写,默认实现还是比较两者是否为同一个引用
-
所有值类型的基类System.ValueType中重写了该方法,用来比较值相等
-
string 比较值相等
Object.Equals(left, right)
静态方法
considered equal
-
引用相同,必定相等
-
只有一个null,必定不等
-
都不是null,且不是同一个引用,根据left的实例Equals方法判断
-
都是null返回true
public static bool Equals(object left, object right)
{
if(object.ReferenceEquals(left,right)) //如果引用相同,则必定相等(包含两个都是null的情况)
{
return true;
}
if(object.ReferenceEquals(left ,null)|| object.ReferenceEquals(null,right)) //若只有一个是null,则必定不等
{
return false;
}
return left.Equals(right);//两个都不是null,且也不是同一个引用,则根据left的实例Equals方法来判断。
}
Object.ReferenceEquals(left, right)
静态方法
the same instance
-
比较两者是否是相同的引用
-
不能重写
-
值类型对象的比较永远返回false
-
两个null的比较永远返回true