首页 > Java > java教程 > 你应该在 Java 的 `.equals()` 方法中使用 `instanceof` 或 `getClass()` 吗?

你应该在 Java 的 `.equals()` 方法中使用 `instanceof` 或 `getClass()` 吗?

Linda Hamilton
发布: 2024-11-27 01:23:13
原创
265 人浏览过

Should You Use `instanceof` or `getClass()` in Java's `.equals()` Method?

在 .equals() 实现中优先选择 instanceof 而不是 getClass()

在 Eclipse 中生成 .equals() 方法时,开发人员会看到选择使用“getClass()”或“instanceof”来比较对象类型。虽然 Eclipse 默认使用“getClass()”,但通常最好选择“instanceof”。

首选 instanceof 的原因

  • 遵守里氏替换原则:使用“getClass()”限制对象相等完全相同类的对象。这违反了里氏替换原则,该原则规定子类应该在所有方面都可以替换其超类。因此,在比较不同类但相同逻辑类型的对象时,使用“getClass()”可能会导致意外行为。
  • 改进的扩展性:通过使用“instanceof”,. equals()方法可以正确识别不同子类的对象之间的相等性。这允许代码具有更大的可扩展性和灵活性,因为可以引入新的子类而不影响相等比较。

空检查的最佳实践

关于null 检查,在使用“instanceof”时删除“if (obj == null)”语句确实是一个好习惯。这是因为“instanceof”保证“obj”是相关类的实例,并且空对象不能是任何类的实例。

支持参数

Josh Bloch,《Effective Java》的作者,提倡在 .equals() 实现中使用“instanceof”。他认为,它确保了对里氏替换原则的正确遵守,并防止依赖 equals 方法的集合中出现令人惊讶的行为。

对此方法的其他支持可以在 Stack Overflow 上的答案和第三个答案中找到Bloch 的书“Effective Java”的章节。

以上是你应该在 Java 的 `.equals()` 方法中使用 `instanceof` 或 `getClass()` 吗?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板