为什么使用特定参数(例如'Book”)覆盖'equals()”会破坏 Java 的相等性检查?
Dec 31, 2024 pm 10:25 PM为什么使用 Book 参数重写 Java 的 equals() 方法会导致问题
重写 equals() 方法对于实现自定义相等性检查至关重要在爪哇。但是,使用带有 Book 参数的自定义 equals() 方法而不是标准 equals(Object) 方法可能会导致意外行为。
理解 equals() 方法
默认情况下,Java 在 Object 类中定义了接受 Object 参数的 equals() 方法。如果您想在自定义类中重写 equals() 来比较特定类型的对象,则必须遵守相同的签名,即 equals(Object)。
重写与重载
重写被定义为为从超类继承的方法提供新的实现。另一方面,重载是重用具有不同参数类型的方法名称。
在提供的代码中,public boolean equals(Book b) 方法构成重载,而不是重写。这是因为与原始 equals(Object) 方法相比,它使用了不同的参数类型。
重载问题
当您重载 equals() 方法时,它破坏了与使用 equals(Object) 进行相等性检查的标准库类的兼容性。例如,ArrayList 使用 equals(Object) 来判断列表中是否存在某个元素。
因此,在 hasBook() 方法中使用重载的 equals(Book) 方法会导致 contains() 失败比较仅使用 ID 实例化的 Book 对象时。
解决方案
要解决此问题,应遵循 equals(Object) 签名正确重写 equals() 方法。这确保了与依赖 equals(Object) 进行相等检查的标准库类的兼容性。
以上是为什么使用特定参数(例如'Book”)覆盖'equals()”会破坏 Java 的相等性检查?的详细内容。更多信息请关注PHP中文网其他相关文章!

热门文章

热门文章

热门文章标签

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

2025年的前4个JavaScript框架:React,Angular,Vue,Svelte

如何将Maven或Gradle用于高级Java项目管理,构建自动化和依赖性解决方案?

如何将JPA(Java持久性API)用于具有高级功能(例如缓存和懒惰加载)的对象相关映射?

Spring Boot Snakeyaml 2.0 CVE-2022-1471问题已修复
