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

Java中含AddressDTO的StudentDTO如何实现equals与hashCode方法?

实现StudentDTO的equals和hashCode方法

首先必须明确:AddressDTO类必须先正确实现equals和hashCode方法,否则StudentDTO中对address属性的比较会是引用地址比较,而非内容比较,导致equals结果不符合预期。

第一步:实现AddressDTO的equals和hashCode

假设AddressDTO包含常见属性(如street、city),示例代码如下:

import java.util.Objects;

public class AddressDTO {
    private String street;
    private String city;

    // 构造器、getter/setter(按需添加)

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        AddressDTO that = (AddressDTO) o;
        return Objects.equals(street, that.street) && Objects.equals(city, that.city);
    }

    @Override
    public int hashCode() {
        return Objects.hash(street, city);
    }
}

如果使用Lombok,直接给AddressDTO加上@Data注解即可自动生成正确的equals和hashCode。

第二步:实现StudentDTO的equals和hashCode

方式一:手动实现

如果不依赖Lombok,手动编写代码如下:

import java.util.Objects;

public class StudentDTO {
    public AddressDTO address;
    public String name;

    @Override
    public boolean equals(Object o) {
        // 同一对象直接返回true
        if (this == o) return true;
        // 判断是否为null或类型不匹配
        if (o == null || getClass() != o.getClass()) return false;
        // 强转后比较属性
        StudentDTO that = (StudentDTO) o;
        // 使用Objects.equals处理null值,避免空指针
        return Objects.equals(address, that.address) && Objects.equals(name, that.name);
    }

    @Override
    public int hashCode() {
        // 组合属性哈希值,null值会被Objects.hash正确处理
        return Objects.hash(address, name);
    }
}

方式二:利用Lombok的@Data

你当前代码已经使用了@Data注解,它会自动生成equals和hashCode方法,但要满足两个条件:

  • AddressDTO必须正确实现equals和hashCode(如加@Data或手动实现)
  • 确保Lombok依赖已正确引入项目

此时StudentDTO代码无需修改,只要AddressDTO符合要求,s1.equals(s2)就能正确比较name和address的内容。

关键注意点

  • 永远使用Objects.equals(a, b)而非直接a.equals(b),避免空指针异常
  • hashCode的实现要和equals保持一致:如果两个对象equals返回true,它们的hashCode必须相等;反之,hashCode相等的对象不一定equals返回true
  • 不要遗漏任何需要比较的属性,否则equals逻辑不完整

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 04:16:05