查看判断两个对象是否是同一个对象要用:object.ReferenceEquals();
因为object“”默认值是比较两个对象是不是同一个对象。所以有时候两个对象的内容相等,但是比较后还是false。
Object的Equals方法也比较两个变量指向的是否同一个对象;对象如果override 了Equals方法,就可以进行内容的相同比较。
默认情况下不是调用Equals方法,需要重载运算符;
String等这些类是重写了Equals方法。
面试题:下面的代码有几个字符串对象
String s1 = "abc";
string s2 = s1;
string s3 = new String(new char[] {‘a‘,‘b‘,‘c‘ });
Console.WriteLine(s1s3);//输出true(虽然这里s1和s3不是同一个对象,但由于string重写了Equals方法,只要内容相等也返回true)
答案:两个字符串对象
class Program
{
static void Main(string[] args)
{
Person p1 = new Person() { Name = "xu", Age = 12 };
Person p2 = p1;
Person p3 = new Person() { Name = "xu", Age = 12 };
//查看判断两个对象是否是同一个对象要用:object.ReferenceEquals();
Console.WriteLine(object.ReferenceEquals(p1, p2));//true
Console.WriteLine(object.ReferenceEquals(p1, p3));//false
p1.Equals(p2);//true
p1.Equals(p3);//true
Console.ReadKey();
}
}
class Person
{
public string Name { get; set; }
public int Age { get; set; }
public override bool Equals(object obj)
{
if(! (obj is Person))
{
return false;
}
else
{
Person that = (Person)obj;
if(that.Name==this.Name&& that.Age==this.Age)
{
return true;
}else
{
return false;
}
}
}
}