1.原理
有时候使用集合的时候我们希望集合里面的对象要是不一样的,但是每个对象都进行new 操作实例对象,我们在使用对象的引用去equals比较都是为false,即会导致这两个对象引用变量一直不同,但是对象的属性可以相同如对象的引用变量s1.equals(s2) = false;但是对象的属性值相同,所以重写equals方法是达到去在使用equals的时候比较对象里面的属性值是否相同
Student s1 = new Student("zhangsna",30);
Student s2 = new Student("zhangsna",0);
这里重写了Student类的equals 和HashCode方法,达到使用equals比较的不是栈区的引用变量的地址比较,
而是堆区对象的内部属性的比较
即使用equals只有在Student对象中那么name和age相同的情况下才为true
2. 好处,在做数据的持久化操作的时候省去在判断zhangsna是否已经存在了数据库
3. 代码
public class Student{
private String name;
private int age;
public Student(){}
public Student(String name,int age){
this.name = name;
this.age = age;
}
public int hashCode(){
return name.hashCode()+age;
}
public boolean equals(Object obj){
System.out.println(obj+"..equals方法执行.."+this);
if(this==obj) return true; //这个在父类Obje