Java 实现 equals() hashCode() compareTo() clone()
示例代码如下:
public class Person implements Cloneable, Comparable<Person>{
private String name;
private int age;
private int[] test;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public int[] getTest() {
return test;
}
public void setTest(int[] test) {
this.test = test;
}
public boolean equals(Object obj){
if(! (obj instanceof Person)){
return false;
}
Person other = (Person) obj;
return name.equals(other.name) && age == other.age;
}
public int hashCode(){
return name.hashCode() + age;
}
@Override
public int compareTo(Person o) {
if(name.compareTo(o.name) != 0){
return name.compareTo(o.name);
}else if(age > o.age){
return 1;
}else if(age < o.age){
return -1;
}
return 0;
}
public Person clone(){
try {
Person person = (Person)super.clone();
person.test = person.test.clone();
return person;
} catch (CloneNotSupportedException e) {
e.printStackTrace();
return null;
}
}
}
1 如果a.equals(b) = true, 则a和b的hashcode值一样。
2 clone时,需要调用super.clone,并且clone()方法不要抛出CloneNotSupportedException,因此需要捕获这个异常并忽略它,或者使用不受检查异常包装它。
3 手动对所有非基本类型域(对象和数组)进行深度复制(deep copy)。基本类型都已经被正确地复制了,同样我们不需要去克隆String和BigInteger等不可变类型。