{
private String name;
public Person(String name)
{
this.name = name;
}
public boolean equals(Person p)
{
return p.name.equals(this.name);
}
}
这样重写equals有没有问题.重写equals需要注意什么.回答结束会给分的...谢谢
class Person
{
private String name;
public Person(String name)
{
this.name = name;
}
public boolean equals(Person p)
{
return p.name.equals(this.name);
}
}
你好...那题是我找来的...我想了解重写equals方法需要注意什么...上面那题错了什么...谢谢
追答第一如果你传入比较的对象是空值,则返回false
第二如果你传入的比较对象跟被比较对象是==的,既两个对象的内存都一样,肯定是相同一个,则返回true
第三如果你传入的比较对象跟被比较对象是同一类型就把比较对象转换成被比较对象类型,返回根据对象能确定唯一的元素比较值
最后都不满足返回false
任何对象的比教,按这个思路写equals方法,应该都是可以的
我看的懂你的代码...我不懂的是equals方法的重写概念...为什么我找来的那题目重写equals方法是错的..重写equals(),括号里面一定是Object类?
追答没说你那个是错的;
至于为什么要重写这个方法:
在java Object中的equals方法:
public boolean equals(Object obj)
{
return (this == obj);
}
很明显,这里两个引用指向内存中的同一个对象,才会返回true,
而我们在使用equals()来比较两个指向值对象的引用的时候,往往希望知道它们逻辑上是否相等,而不是它们是否指向同一个对象。在这样的情况下, 如果超类也没有重写equals()以实现期望的行为,这时我们就需要重写equals方法。
简单的说:
equals在Object类中声明,默认的比较规则是:比较引用
最后谨慎提醒你,当你重写了equals方法后,记得重写hashCode方法