You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编写Book类的equals方法以实现双属性相等判断

完善Book类的equals方法,实现title和bound相等则对象相等

你当前的equals方法逻辑完全不符合需求——只要传入的是Book实例就直接返回true,完全没校验title和bound这两个核心属性。下面是符合要求的实现,同时附带Java规范要求的hashCode重写(因为规范明确:如果两个对象equals返回true,它们的hashCode必须相等,否则在HashMap、HashSet这类集合中会出现异常行为)。

完整代码实现

import java.util.Objects;

public class Book {
    private String title;
    private boolean bound;

    Book(String title, boolean bound) {
        this.title = title;
        this.bound = bound;
    }

    @Override
    public boolean equals(Object obj) {
        // 同一对象直接返回true,提升效率
        if (this == obj) return true;
        // 参数为null或不是Book类型,直接返回false
        if (obj == null || getClass() != obj.getClass()) return false;
        // 强转为Book类型
        Book book = (Book) obj;
        // 比较bound属性,用Objects.equals处理title的null情况
        return bound == book.bound && Objects.equals(title, book.title);
    }

    @Override
    public int hashCode() {
        // 根据参与equals比较的属性生成哈希值
        return Objects.hash(title, bound);
    }
}

关键细节说明

  • 同一对象判断:this == obj是为了避免不必要的属性比较,提升方法执行效率。
  • 类型判断:用getClass() != obj.getClass()代替instanceof,是为了避免子类和父类之间的误判(如果后续Book有子类,instanceof会导致子类实例和父类实例被错误判定为相等;如果确定不会有子类,用instanceof也可以,但getClass的方式更严谨)。
  • 属性比较:
    • bound是boolean类型,直接用==比较即可。
    • title是String类型,Objects.equals可以同时处理title为null的情况,避免空指针异常(等价于手动写(title == null ? book.title == null : title.equals(book.title)))。
  • hashCode重写:用Objects.hash根据title和bound生成哈希值,保证equals相等的对象hashCode一定相等。

内容的提问来源于stack exchange,提问作者LoveFile

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 19:48:04