==与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();
}

 

posted @ 2020-09-23 10:20  丨西风  阅读(166)  评论(0编辑  收藏  举报