重写equals方法
作为一个菜鸟,刚学Java时很快就会接触到equals方法的重写,但是写出来的代码确实惨不忍睹。下面是本人初学时写的代码:
public class Person {
String name;
int age;
public Person(String name,int age) {
this.name=name;
this.age=age;
}
public String Str() {
return this.name+“ ”+this.age;
}
public boolean equals(Person p) {
if(p.Str().equals(this.Str()))
return true;
return false;
}
}
实际上这不说是对的代码,甚至算不上是对equals的重写,应为这里更改了equals方法的参数类型(不会就我一个人初学的时候这么写吧)
而正确的写法应该是:
public class Person {
String name;
int age;
public Person(String name,int age) {
this.name=name;
this.age=age;
}
public String Str() {
return this.name+this.age;
}
@Override
public boolean equals(Object obj) {
if(this == obj){
return true;//地址相等则直接判断相等
}
if(obj == null){
return false;//非空性
}
if(obj instanceof Person){//判断obj是Person的一个实例
Person other = (Person) obj;
//需要比较的字段相等,则这两个对象相等
if(other.Str().equals(this.Str())){
return true;
}
}
return false;
}
@Override
public int hashCode() {
int result = 17;
result = 31 * result + (name == null ? 0 : name.hashCode());
result = 31 * result +age;
return result;
}
//重写hashCode方法,这一步不要省略,原则是两个相等的对象应具有相同的哈希值(不相等的对象也可能有相同的哈希值)
}