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