本文共 1181 字,大约阅读时间需要 3 分钟。
在项目中经常看到实体类中的set/get方法下都有这样一段代码:
public boolean equals(Object o){}public int hashCode(){}
这个方法的作用是什么呢?
如果没有这些重写equals 和hashcode方法会怎么呢?
这个要从HashMap说起。在定义HashMap时如果key值为自定义对象,必须重写equals和hashCode方法。
直接看代码:
class cimTest_hashcode_equals { private Integer id; public Integer getId() {return id; } public cimTest_hashcode_equals(Integer id) {this.id = id; }// 故意先注释掉equals和hashCode方法 public boolean equals(Object o) { if (o == null || !(o instanceof cimTest_hashcode_equals)) { return false; } else { return this.getId().equals(((cimTest_hashcode_equals) o).getId());} }// public int hashCode() { return id.hashCode(); }}
public class WithoutHashCode { public static void main(String[] args) { cimTest_hashcode_equals k1 = new cimTest_hashcode_equals(1); cimTest_hashcode_equals k2 = new cimTest_hashcode_equals(1); HashMaphm = new HashMap (); hm.put(k1, "Key with id is 1"); System.out.println(hm.get(k2));}}
先说一下执行结果: 1、注释掉equals方法,System.out.println(hm.get(k1)); -> Key with id is 1
2、注释掉equals方法,System.out.println(hm.get(k2)); -> null
1 | case | code | 结果 | 结论 |
2 | 注释掉equals和HashCode方法 | System.out.println(hm.get(k2)) | null | 以 |
3 | ||||
4 | ||||
5 |
转载地址:http://skeqj.baihongyu.com/