1 hashcode
- hashcode是顶级类Object类的方法;
- 通过一定的hash规则,计算出来的数值;
2 equals
- equals是顶级类Object类的方法;
- 可以自己定义规则判断2个对象是否一致;
判断逻辑 - 判断内存地址是否相同;
- 判断是否为空以及类型是否相同;
- 强转;
- 判断值是否相同;
3 示例
没有重写之前equals比较
package ObjectOverride;
public class Teaher {
public static void main(String[] args) {
Teaher teaherOne=new Teaher("辜老师",27,'女');
Teaher teaherTwo=new Teaher("辜老师",27,'女');
Teaher teaherThree=new Teaher("曾老师",25,'女');
//如果不重写equel方法就会返回fasle
boolean equals = teaherOne.equals(teaherTwo);
System.out.println(equals);
}
String name;
int age;
char sex;
public Teaher(String name, int age, char sex) {
this.name = name;
this.age = age;
this.sex = sex;
}
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 char getSex() {
return sex;
}
public void setSex(char sex) {
this.sex = sex;
}
}
重写hashcode方法后
package ObjectOverride;
public class Teaher {
public static void main(String[] args) {
Teaher teaherOne=new Teaher("辜老师",27,'女');
Teaher teaherTwo=new Teaher("辜老师",27,'女');
Teaher teaherThree=new Teaher("曾老师",25,'女');
boolean equals = teaherOne.equals(teaherTwo);
System.out.println(equals);
boolean equals1 = teaherOne.equals(teaherThree);
System.out.println(equals1);
}
String name;
int age;
char sex;
public Teaher(String name, int age, char sex) {
this.name = name;
this.age = age;
this.sex = sex;
}
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 char getSex() {
return sex;
}
public void setSex(char sex) {
this.sex = sex;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Teaher teaher = (Teaher) o;
if (age != teaher.age) return false;
if (sex != teaher.sex) return false;
return name != null ? name.equals(teaher.name) : teaher.name == null;
}
@Override
public int hashCode() {
int result = name != null ? name.hashCode() : 0;
result = 31 * result + age;
result = 31 * result + (int) sex;
return result;
}
}