这两个的作用是什么呢?
其实就是为了判断两个变量或者对象等是否相等或相同。
那么什么时候==和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; }
}