首页 > Java > java教程 > 为什么使用特定参数(例如'Book”)覆盖'equals()”会破坏 Java 的相等性检查?

为什么使用特定参数(例如'Book”)覆盖'equals()”会破坏 Java 的相等性检查?

Barbara Streisand
发布: 2024-12-31 22:25:09
原创
1042 人浏览过

Why Does Overriding `equals()` with a Specific Parameter (e.g., `Book`) Break Java's Equality Checks?

为什么使用 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中文网其他相关文章!

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