一、定义
-
- Object类提供了一个方法 equals方法 :作用:比较对象具体内容是否相等。
- 点进equals源码发现底层仍然用==比较!!!
比较对象的内容是否一致:一致返回true!
不一致返回false!
1、父类中的缺点
对于引用数据类型来说,父类(Object)中提供的equals方法是比较对象的地址值,所以一定返回false;
2、改写父类的方法
2.1、代码实例
引入 instanceof,代码块中有解释内容
a instanceof b: //判断a对象是否是b这个类的实例,如果是 返回true 如果不是返回false
如果返回true,则进行下一步,开始比较对象具体内容是否相等。
//对equals方法进行重写:
public boolean equals(Object obj){
a instanceof b:
//判断a对象是否是b这个类的实例,如果是 返回true 如果不是返回false
if(obj instanceof Phone){//属于Phone类的对象
//将obj类型转为Phone类型:
Phone other = (Phone)obj;//????多态中解释
if(this.getBrand()== other.getBrand()&&this.getPrice()== other.getPrice()&&this.getYear()==other.getYear()){
return true;
}
}
return false;
}
3、总结equals作用:
这个方法提供了对对象的内容是否相等 的一个比较方式,对象的内容指的就是属性。
父类Object提供的equals就是在比较==地址,没有实际的意义,我们一般不会直接使用父类提供的方法,而是在子类中对这个方法进行重写。
二、利用集成开发工具(IDEA)生成equals方法
- 第一步:alt+insert
- 第二步:点击蓝色光标处:
- 第三步:点击Next,之后一直点击蓝色光标处,直至最后的Create
创建完成:
@Override:重写内容
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Phone phone = (Phone) o;
return Double.compare(phone.price, price) == 0 && year == phone.year && Objects.equals(brand, phone.brand);
}
注意:
利用该方法同时生成了 hashCode()方法,目前不涉及此方法,可以删去,或者保留,因为不使用,所以不会对我们的内容造成影响!