先看看官方的解释:
== :
对于预定义的值类型,如果操作数的值相等,则相等运算符 (==) 返回 true,否则返回 false。 对于 string 以外的引用类型,如果两个操作数引用同一个对象,则 == 返回 true。 对于 string 类型,== 比较字符串的值。
Equals:
public virtual bool Equals(
Object obj
)
Equals 的默认实现支持引用相等性(对于引用类型)和按位相等性(对于值类型)。 引用相等性是指进行比较的多个对象引用所引用的是同一个对象。 按位相等性是指进行比较的多个对象具有相同的二进制表示形式。
请注意,派生类型可以重写 Equals 方法以实现值相等性。 值相等性是指所比较的对象具有相同的值,即使它们具有不同的二进制表示形式也是如此。 例如,请考虑两个分别表示数字 1.10 和 1.1000 的 Decimal 对象。 Decimal 对象不具有按位相等性,因为它们具有不同的二进制表示形式,因此会考虑不同数量的尾随零。 但是,这些对象具有值相等性,因为在进行比较时尾随零无关紧要,数字 1.10 和 1.1000 被视为相等。
public static bool ReferenceEquals(
Object objA,
Object objB
)
返回值类型:System.Boolean
备注不像 Equals 方法和相等运算符,ReferenceEquals 方法不能被重写。 为此,如果要测试两个对象引用的平等,且不确定 Equals 方法的实现时,可以调用 ReferenceEquals 方法。 但是,请注意,如果 objA 和 objB 是值类型,则它们先装箱,然后传递给 ReferenceEquals 方法。