温故知新 C# Equals ReferenceEquals ==

System.Object类中的Equals和ReferenceEquals方法

public virtual bool Equals(object obj)
{
    
return RuntimeHelpers.Equals(this, obj);
}

public static bool Equals(object objA, object objB)
{
    
return ((objA == objB) || (((objA != null&& (objB != null)) && objA.Equals(objB)));
}

public static bool ReferenceEquals(object objA, object objB)
{
    
return (objA == objB);
}

其中Equals有两个重载,一个是虚方法,一个是静态方法

静态的Equals内部做判定处理,调用虚方法Equals.

(1)对于引用类型

  这三种比较方式都是对引用进行比较

  当RefrenceEquals(null,null)两个参数都为null时,返回的是True

(2)对于值类型

  Equals:用于对实例数据进行对比(System.ValueType重载了Object.Equals,实现对实例数据进行判等)

  ==:如果再没有重载的情况下,是按位进行对比的

  ReferenceEquals:返回的都是false

所以,当是值类型时,ReferenceEquals返回的都是false,而Equal和==根据值类型的类型和值进行比较,

原文地址:https://www.cnblogs.com/_dragon/p/2096347.html