相同的引用肯定有相同的值,但是相同值却不一定有相同的引用
C# 中有两种不同的相等:引用相等和值相等。值相等是大家普遍理解的意义上的相等:它意味着两个对象包含相同的值。例如,两个值为 2 的整数具有值相等性。引用相等意味着要比较的不是两个对象,而是两个对象引用,且两者引用的是同一个对象
在默认情况下Equals只能在引用类型中用,但是在ValueType类型中已经重写了Equals方法,所以通常情况下Equals方法既可以用于引用类型,也可以应用于值类型;在引用类型中Equals方法比较的是引用相等,而在值类型中Equals方法比较的是值相等。
在.NET中,ReferenceEquals()方法是专门用来表示引用相等的;
==运算符和Equals()方法都可以用来表示引用相等和值相等。对于值类型而言, ==和Equals()方法是一样的,使用上没有什么区别。那么重点是引用类型:
从效果上说,对于引用类型, ==运算符表示引用相等(string有运算符重载,除外),而Equals()表示值相等。从效果上讲,这个说法好像不算错,网上也有这么一种说法。