重写hashcode和equals

equals与hashcode间的关系是这样的:

1、如果两个对象相同(即用equals比较返回true),那么它们的hashCode值一定要相同;

2、如果两个对象的hashCode相同,它们并不一定相同(即用equals比较返回false)。

为什么必须要重写hashcode方法,其实简单的说就是为了保证同一个对象,保证在equals相同的情况下hashcode值必定相同,如果重写了equals而未重写hashcode方法,可能就会出现两个没有关系的对象equals相同的(因为equals都是根据对象的特征进行重写的),但hashcode确实不相同的。

@Data
public class ShopProductSpecValueDTO {
    private String id;

    private String productId;

    private String specId;

    private String specvalueId;

    private String createdBy;

    private Date dateCreated;

    private String updatedBy;

    private Date dateUpdated;

    public ShopProductSpecValueDTO(){
    }

    public ShopProductSpecValueDTO(String productId,String specId,String specvalueId){
        this.productId = productId;
        this.specId = specId;
        this.specvalueId=specvalueId;
    }

    @Override
    public int hashCode() {
        int result = id != null ? id.hashCode() : 0;
        result = 31 * result + (productId != null ? productId.hashCode() : 0);
        result = 31 * result + (specId != null ? specId.hashCode() : 0);
        result = 31 * result + (specvalueId != null ? specvalueId.hashCode() : 0);
        return result;
    }

    @Override
    public boolean equals(Object obj) {
        if (obj == null){
            return false;
        }
        if (this == obj){
            return true;
        }
        if (getClass() != obj.getClass()){
            return false;
        }
        ShopProductSpecValueDTO o = (ShopProductSpecValueDTO) obj;
        if (this.productId != null ? !this.productId.equals(o.productId) : o.productId != null) return false;
        if (this.specId != null ? !this.specId.equals(o.specId) : o.specId != null) return false;
        if (this.specvalueId != null ? !this.specvalueId.equals(o.specvalueId) : o.specvalueId != null) return false;
        return true;
    }

}
复制代码

转载于:https://juejin.im/post/5d19b74e6fb9a07ef81a1439

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值