所以我在文章中读到==
检查对象引用是否相同.equals()
检查数据是否相同,但是当我自己编写程序时,感到困惑。
我有一个班级我,我的构造函数中要通过10,20 现在我创建了另一个对象p1和p2
person p = new person(10,20);
person p1;
p1 = p;
person p2=new person(10,20);
Console.WriteLine(p==p1); //true
Console.WriteLine(p.Equals(p1)); //true
Console.WriteLine(object.ReferenceEquals(p,p1)); //true
Console.WriteLine(p == p2); //false
Console.WriteLine(p.Equals(p2)); //false confusion same data
Console.WriteLine(object.ReferenceEquals(p, p2));//false
现在我对p.equals(p2)感到困惑,它们都具有相同的数据10,20,所以为什么 错误
答案 0 :(得分:0)
p.Equals(p1)
,它将使用对象的Equals方法。
您未实现,它将比较两个对象的地址,如果它在内存中的地址相同,那么它将为真。
请注意p1 = p
,p1和p指代内存中的相同地址。
person p2=new person(10,20)
将在内存中的不同地址中创建与p
对象相同内容的对象
p.Equals(p2)在内存中具有不同的地址,并且没有实现Equals方法,它将返回false。
您可以像这样实现Equals方法
public override bool Equals(Object obj)
{
person p= obj as person;
if (p == null)
return false;
else
return obj.p1 == p.p1 && obj.p2 = p.p2; // assum your property
}
并且您也需要实现GetHashCode方法
public override int GetHashCode()
{
return this.p1 + this.p2; //sample
}