对于判断两个类对象是否相等的一般思路
- 判断是否引用的是同一个对象:
this == obj
- 判断
obj
这个对象实例是否为null
- 通过
getClass() == obj.getClass()
或obj instanceof 超类
判断是否是同一个类,这里的 超类 是指this
和obj
共同的超类 - 判断
this
和obj
对象实例中的数据信息是否相同
ps: 对于基本数据类型,使用 == 进行判断,对于引用数据类型使用 equals 进行判断,建议使用Objects.equals(Object o1, Object o2),这样可以处理调用者为null
的情况
对于选择 getClass() == obj.getClass()
或 obj instanceof 超类
来判断相等的时机
- 如果子类拥有自己的相等概念,即对于相等的需求是细化到子类的数据信息,则使用
getClass() == obj.getClass()
来进行判等。 - 如果由超类决定相等的概念,即只需要保证超类中的数据信息相等即可,则使用
obj instanceof 超类
来进行判断
简单示例