java equals方法的重写

{
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方法吧 ,以后都可以根据情况套用:
public boolean equals(Object obj) {
if(obj==null)
return false;
if(this == obj){
return true;
}
if (obj instanceof Person) {
Person other = (Person) obj;
return (p.name).equals(this.name);
}
return false;
}追问

你好...那题是我找来的...我想了解重写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方法

温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-05-05
这种问题很简单,没必要非得追着Object类不放,其实人家就写在类库里,所以你要想重写这类方法时,比如你说的这个equals(),只需要写Person的对象,不需要出现Object。
第2个回答  2011-10-24
有个地方是写错了吧
public boolean equals(Person p)
{
if( this.name.equals(this.name))
return p ;
;

}}