在C#中,==和Equals都是比较的意思,那他们有什么不同呢?相信很多初学者都搞不清楚这两个的区别,所以我们来剖析一下

1.值类型的比较

static void Main(string[] args)
{
    int a = 100;
    int b = 100;
    Console.WriteLine(a == b);
    Console.WriteLine(a.Equals(b));

}

微信截图_20210106200616

对于值类型来说 两者比较的都是”内容”是否相同,即 值 是否一样,很显然此时两者是划等号的。

2.引用类型的比较

class Program
{
static void Main(string[] args)
    {
        MyInt myInt1 = new MyInt();
        myInt1._a = 100;
        myInt1._b = 'a';
        MyInt myInt2 = new MyInt();
        myInt2._a = 100;
        myInt2._b = 'a';
        Console.WriteLine(myInt1==myInt2);
        Console.WriteLine(myInt1.Equals(myInt2));

    }
}
public class MyInt
{
    public int _a;
    public char _b;
}

微信截图_20210106200555

对于 myInt1==myInt2 比较的结果是false,这点是毫无疑问的,因为他俩是两个不同的变量,所以引用的地址也是不同的。

但是对于myInt1.Equals(myInt2)返回false,可能有人会产生疑问,myInt1和myInt2的内容是相同的啊,为什么他俩的比较结果却是为false呢?原因就在于在Equals是Object中的一个虚方法,而person类中没有对她进行重写,因此此时调用的仍是父类中的Equals方法。但是父类是无法知道你都有哪些成员字段的,因此返回的是false。要想让他能够比较两个变量的内容是否相同,那就应该重写Equals方法。

3.String类型的==和Equals

static void Main(string[] args)
{
    String str1 = "abc";
    String str2 = "abc";
    Console.WriteLine(str1 == str2);
    Console.WriteLine(str1.Equals(str2));

}

微信截图_20210106200616

这里str1==str2大家应该清楚了,就是判断字符串是否相同,可Equals为什么也是True呢?这是由于微软在内部对String里面==和Equals进行了重写,重写后他比较的则是两个变量的内容是否相同,重写后的 = = 操作符内部调用的即是 equals** 方法,所以输出的是True。

最后修改:2021 年 01 月 06 日 08 : 19 PM
如果觉得我的文章对你有用,请随意赞赏