C#基础——(==和equals的区别)

这两个的作用是什么呢?

其实就是为了判断两个变量或者对象等是否相等或相同。

那么什么时候==和equals是相同的呢?

对于值类型来说,这两个都是来判断值是否相同。值类型和引用类型的区别

那么什么时候==和equals是不同的呢?

对于引用类型来说,==判断是时引用地址是否相同(是否执行同一个堆中地址),equals判断的是是否是对一个对象的引用(堆里面的内容是否相同)

例子1:

拿引用类型string来说:
在这里插入图片描述
上面的a和b是不同的变量,引用地址应该不一样,那为什么a==b输出为true呢

引用string是微软封装的一个字符串,在内部已经对==操作符重写,重写后比较的是两个变量的内容是否相同

例子2:

自己写的Person类
在这里插入图片描述
上上面p1和p2的内容是相同的,那么为什么还是False

对于Equals是Object的一个虚方法,在Person类里面没有对equals进行重写,还是父类的equals的方法。而父类无法知道你都有哪些成员字段,所以返回false。要想让他比较,要重写Equals方法

public override bool Equals(object obj)
{
    Person p = obj as Person;
    if(this.Name==p.Name &&this.Sex==p.Sex)
    {
        return true;
    }
    else
    { return false; }
}

发布了110 篇原创文章 · 获赞 21 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/make_1998/article/details/90743789