==与Equals的区别
C#中有两种不同的相等:引用相等和值相等。
下面就看看它们直接的区别:
- == 比较的是栈内的内容,对于值类型而言,”==“比较的就是两个对象的值,除字符串(字符串类型是一个特殊情况)以外的引用类型,比较的就是两个引用类型在栈内的地址(比较的是引用)
- Equals 方法是定义在Object中的虚方法,用来比较两者引用对象的值是否相等,.NET中类型就都可以重写Equals方法,例如,在.NET中string类型就重写了Equals方法,用于比较两个字符串的值是否相等,而不是字符串引用是否相等。
在实际使用过程中我们发现,在比较是否相等时,两者均可以使用,为什么呢?这是因为在实际的值类型或部分引用类型的代码里都对Equals方法进行了重写,使Equals比较的是两者引用的值,而不是两者的引用地址。
static void Main(string[] args) { object m1 = 1; object m2 = 1; Console.WriteLine(m1==m2); Console.WriteLine(m1.Equals(m2)); Console.Read(); }