Object类中的equals()方法只能判断两个引用是否指向同一片空间,如果我想判断自定义类中两对象的变量值相同,此时我就需要重写equals()方法。
此时有人肯定在想那直接用==判断值相等不就完了,我当时也这么想的.....但是,如果是两个不同类型的对象,类型都不一样,就算里面的成员变量值相同那也是false,因为类型不同。所以我们需要重写equals()方法。
因此,我们先首先创建一个自定义类Animals类
接着我们自己写一个myEqulas方法
?来看看idea自动重写Object类的equals()方法(基本是一致的)
?原码:
class Animals{
int id;
public Animals(int id) {
this.id = id;
}
public boolean myEquals(Object o){
//1.o引用为null,直接返回false
if(o == null){return false;}
//2.指向同一片空间,返回true
if(this == o){return true;}
//3.o引用是否和当前对象是同一类型或者当前对象的子类类型
if(!(o instanceof Animals)){
return false;
}
//4.判断值是否相同
Animals animals = (Animals) o;
return this.id == animals.id;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Animals animals = (Animals) o;
return id == animals.id;
}
}
讲解一下instanceof保留字: 1.instanceof是Java的一个保留关键字,左边是对象,右边是类,返回类型是boolean类型。 2.作用就是判断左边的对象是否是右边类或者该类的子类创建的实例对象。 如果是返回true,否则flase;
|