java 学习总结
1.为什么要重写equals()方法?
Object类中equals方法比较的是两个对象的引用地址,只有对象的引用地址指向同一个地址时,才认为这两个地址是相等的,否则这两个对象就不想等。
如果有两个对象,他们的属性是相同的,但是地址不同,这样使用equals()比较得出的结果是不相等的,而我们需要的是这两个对象相等,因此默认的equals()方法是不符合我们的要求的,这个时候我们就需要对equals()方法进行重写以满足我们的预期结果。
在java的集合框架中需要用到equals()方法进行查找对象,如果集合中存放的是自定义类型,并且没有重写equals()方法,则会调用Object父类中的equals()方法按照地址比较,往往会出现错误的结果,此时我们应该根据业务需求重写equals()方法。
2.为什么java中在重写equals()方法后必须对hashCode()方法进行重写?
java 中有关hashCode()方法的equals协定,如果根据 equals()方法,两个对象是相等的,那么对这两个对象中的每个对象调用 hashCode结果应该是相同的;而两个hashCode()返回的结果相等,两个对象的equals()方法不一定相等(生产hashCode 的方法可能不同参数可能不同)。
3.重写 hashCode()方法
int hash = 7;
hash = 31hash+id;
hash = 31hash+name.getHash()
return hash;
4.重写 equals() 方法
1. if (this == obj) return true; 通本类进行判断
2. if ((obj == null) || (obj.getClass() != this.getClass())) return false; 非空 类型进行判断
3 Student student = (Student) obj;
return id == student.getId&& (name == student.getName || (name != null && name.equals(student.getName)));( 业务需求中需要定义并且关心的属性)