java中任何一个类都是Object类的直接或间接子类,如果类没有超类,则它默认继承自Object类,在Object类中,实现了很多有用的方法,equals()方法默认操作检测两个对象是否具有相同的引用,这虽然很合理,但是并没有实用价值,通常需要重写该方法来比较类的域是否相等,如果参与比较的所有域都相等,则对象也相等,否则不等,对于基本类型恶意直接使用"=="进行判断,对于引用类型则需要重写equals()方法。该方法的声明如下:
public boolean equals(Object obj) {
}
本实例将创建三只宠物猫,通过比较它们的名字、年龄、重量、颜色属性来看它们是否相同。
实现过程:
- 创建Cat类,在该类中定义了4个变量,name、age、weight、color;
- 重写equals()方法来比较对象的属性是否相同;
- 重写toString()方法来方便输出对象;
代码如下:
import java.awt.Color;
public class Cat {
//创建变量
private String name;
private int age;
private double weight;
private Color color;
//构造方法,初始化变量
public Cat(String name, int age, double weight, Color color) {
this.name = name;
this.age = age;
this.weight = weight;
this.color = color;
}
@Override
public boolean equals(Object obj) {
//将Cat类转换为obj
Cat cat = (Cat) obj;
//比较名字、年龄、重量、颜色是否相同
return name.equals(cat.name) && (age == cat.age) && (weight == cat.weight) && (color.equals(cat.color));
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append("名字:" + name + "\n");
sb.append("年龄:" + age + "\n");
sb.append("重量:" + weight + "\n");
sb.append("颜色:" + color + "\n");
return sb.toString();
}
public static void main(String[] args) {
//创建三只宠物猫对象
Cat cat1 = new Cat("Java", 12, 21, Color.BLACK);
Cat cat2 = new Cat("C++", 12, 21, Color.WHITE);
Cat cat3 = new Cat("Java", 12, 21, Color.BLACK);
//输出宠物猫信息
System.out.println("猫咪1号:\n" + cat1);
System.out.println("猫咪2号:\n" + cat2);
System.out.println("猫咪3号:\n" + cat3);
//比较宠物猫是否相同
System.out.println("猫咪1号是否与猫咪2号相同:" + cat1.equals(cat2));
System.out.println("猫咪1号是否与猫咪3号相同:" + cat1.equals(cat3));
}
}
返回结果: