java hashcode equals

object 判断两个对象是否相同

判断两个对象是否为同一个引用,引用地址如何获得,通过

hashcode ()方法 返回的就是对象的内存地址。

 

 

String Integer Double 等类重写了 euqals方法,判断两个对象是否相同的方式就是 判断两个对象的内容是否相同。

这样就不用判断 hashcode 了。

 

 

如果一个类的多个对象 被存储在hashmap 做key ,或者存储到了hashset 里:

 

判断 hashset 是否包含某个对象,换句话说 object1 是否等于object2 ,怎么处理的?

首先会先 判断object1 和object2 的hashcode 是否相同,然后判断 内容是否相同,最后才叫相同。

 

所以 如果一个类 要放到hashset 或者hashmap 里,

需要 复写equals 和hashcode 方法。

 

 

package com.weiyan.risk.service.application.engine_statics.response.dto;

import lombok.Data;

import java.io.Serializable;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @description:
 * @author: zhy
 * @date:Created in 下午8:46 2018/6/18
 */
@Data
public class RuleDetailDTO implements Serializable{

    private static final long serialVersionUID = 6343239011477764779L;

    private String ruleNum;

    /**
     * 风险提示
     */
    private String ruleName;

    /**
     * 去掉 已过时
     */
    @Deprecated
    private String ruleDesc;

    /**
     * 去掉 已过时
     */
    @Deprecated
    private String hitDesc;



    private String ruleDetail;


    /**
     * 风险等级
     */
    private String riskLevel;


    /**
     * 变量列表 用于划分处理
     */
    private List<Map> variableMap;

    private String hitTag;
    
    @Override
    public boolean equals(Object obj) {
        if(obj==null){
            return false;
        }
        if(this==obj){
            return true;
        }
        if(obj instanceof RuleDetailDTO){
        		RuleDetailDTO dto=(RuleDetailDTO)obj;
            if(dto.getRuleNum().equals(this.ruleNum)){
                return true;
            }else{
                return false;
            }
        }
        return false;
    }

    @Override
    public int hashCode() {
        return super.hashCode();
    }

    public static void main(String[] args) {




        RuleDetailDTO d1=new RuleDetailDTO();
        d1.setRuleNum("11212");
        System.out.println(d1.hashCode());

        RuleDetailDTO d2=new RuleDetailDTO();
        d2.setRuleNum("11212");
        System.out.println(d2.hashCode());
        System.out.println(d1.equals(d2));

        Object obj=null;




        HashMap<RuleDetailDTO,String> map=new HashMap();
        map.put(d1,"1");

        System.out.println(map.containsKey(d2));

    }
}




1595428806
1072408673
true
false

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值