需要自己定义比较方式的时候重写equals方法。
比如说,如果默认的比较方式是按字符abc比较的,那么你想换一种比较方式,那么就可以重写equals。作者: 崔维友 时间: 2012-11-26 22:41
简单说就是需要的时候。啰嗦点就是继承来的toString()和equals()不能满足需要的时候。
toString方法主要用于打印对象的现有信息。实际是getClass().getName() + '@' + Integer.toHexString(hashCode()) ,返回字符串。你可以根据自己的需要重写。比如直接返回字符串“return Just return a string.”。
equals方法主要做比较用,比如字符串。当其默认的按自然顺序比较不能满足需要时就得重写,如按照长度排序。当此方法被重写时,通常有必要重写 hashCode 方法,以维护 hashCode 方法的常规协定,该协定声明相等对象必须具有相等的哈希码。
具体参阅API。
--------------------------
不才拙见,敬请指正。 作者: 马超happy519 时间: 2012-11-26 23:34
Object类默认是所有引用类的父类,所有引用类型都继承了Object中的toString()方法。toString()方法的功能是返回当前对象的字符串表示,该方法可以很方便地将引用类型转换为字符串类型。toString()方法的定义格式为:public String toString()。toString()方法返回的字符串格式由类名、“@”符和对象散列码的无符号十六进制表示组成,具体格式为:getClass().getName()+’@’+Interger.toHexString(hashCode())。
例如:
public class DemotoString
{
public static void main(String[] args)
{
Demo demo = new Demo();
System.out.println(demo.toString());
}
}
class Demo
{
}
其输出为:
Demo@61de33
如果不满意toString()方法返回的字符串格式,可以在子类中重写该方法。在JDK帮助文档中,也建议所有的子类根据需要都重写此方法。
例:
public class Person
{
private String name;
private int age;
private String sex;
public String getName()
{
return name;
}
public void setName(String name)
{
this.name = name;
}
public void setAge(int age)
{
this.age = age;
}
public int getAge()
{
return age;
}
public String getSex()
{
return sex;
}
public void setSex(String sex)
{
this.sex = sex;
}
///覆盖toString()方法
public String toString()
{
return getClass()+ "["+"name="+name+",age="+age+",sex="+sex+"]";
}
public static void main(String args[])
{
Person p = new Person();
p.setName("帕奎奥");
p.setAge(30);
p.setSex("男");
System.out.println(p.toString());
}
}
输出为:class Person[name=帕奎奥,age=30,sex=男]
public class Person { //写一个Person类
private int id;
private String name;
public int hashCode() { //重写哈希码以维护 hashCode 方法的常规协定,相等对象必须具有相等的哈希码。
int temp = 23; //写一个随意的变量作为类标识
return temp+this.id*43; //防止子类哈希码的重复
}