本帖最后由 孙传磊 于 2013-3-14 00:27 编辑
按照视频说要使类具有可比较性需要实现Comparable 接口,覆写compareto,hashCode,和equals方法
可是在练习的时候遇到一个这样的问题,当我传入两个不同Student的对象比较时结果是,false,不相等。实现了比较。
但是当我传入Student的子类ColStudent的对象和Student的对象比较时既然返回true,相等。
毕竟ColStudent的对象和Student的对象不是同一类型啊,为什么会相等呢?下面是我写得代码。
问题出在那呢?如何才能实现不同对象也能分辨出来?
class Student implements Comparable<Student>{
private String name;
private int age;
public Student(String name,int age){
this.name=name;
this.age=age;
}
public int hashCode() {
final int prime = 31;
return name.hashCode()+age*31;
}
public boolean equals(Object obj){
if(obj instanceof Student){
Student s=(Student)obj;
if(s.name.equals(this.name) && s.age==this.age){
return true;
}
}
return super.equals(obj);
}
public int compareTo(Student o) {
int num=new Integer(this.age).compareTo(new Integer(o.age));
if(num==0) return this.name.compareTo(o.name);
return num;
}
}
class ColStudent extends Student{
public ColStudent(String name, int age) {
super(name, age);
}
}
public class EqualsT {
public static void main(String[] args){
Student s=new Student("zhangsan", 12);
Student s1=new Student("wangwu", 12);
ColStudent c=new ColStudent("zhangsan", 12);
System.out.println((s.compareTo(s1))==0 ? true :false);
System.out.println((s.compareTo(c))==0 ? true :false);
}
}
输出结果是:
false
true
|