Java中equals()重写示例

本文介绍了一种在自定义类中正确重写equals()方法的方法。通过一个具体的例子——Date类,展示了如何确保两个对象之间的比较是准确且一致的。文章强调了在重写equals()方法时应该遵循的最佳实践。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

很多时候看到许多地方说在自己的类里重写equals()方便用以比较两个对象相等,但一直未能详细探索到底怎么重写是比较好的方式。如今看到书上的一个模板,故记之。

如果该对象的引用和参数对象的引用相同,返回true。这项测试在成立时能够免去其他所有测试工作。

如果参数为null,返回false(还可以避免在之后的代码中使用空引用)。

如果两个对象的类不同,返回false。要得到一个对象的类,可以使用getClass()方法。可以使用==判断Class类型的对象是否相等,因为同一种类型的所有对象的getClass()一定能够返回相同的引用。

将参数对象的类型从Object转换到Date,因为前一项已经测试已经通过,这种转换必然成功。

如果任意实例变量的值不相同,返回false。

实例类Date如下:

public class Date {
	private final int month;
	private final int day;
	private final int year;

	public Date(int m, int d, int y) {
		month = m;
		day = d;
		year = y;
	}

	public int month() {
		return month;
	}

	public int day() {
		return day;
	}

	public int year() {
		return year;
	}

	public boolean equals(Object x) {
		if (this == x) {
			return true;
		}
		if (x == null) {
			return false;
		}
		if (this.getClass() != x.getClass()) {
			return false;
		}
		Date that = (Date) x;
		if (this.day != that.day) {
			return false;
		}
		if (this.month != that.month) {
			return false;
		}
		if (this.year != that.year) {
			return false;
		}
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值