java重写equals和hashCode方法
2017-01-19 00:42
405 查看
要点
重写equals一定要重写hashCode 两个对象相等hashCode一定相等 hashCode相等对象不一定相等
代码示例
测试类
结果
重写equals一定要重写hashCode 两个对象相等hashCode一定相等 hashCode相等对象不一定相等
代码示例
//要点 两个对象相等则他们的hashCode一定想等 hashCode相等 两个对象不一定相等 public class Employee { //重写equals和hashCode方法 private String name; private int age; public Employee() {} public Employee(String name, int age) { this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public int hashCode() { return Objects.hash(name,age); //采用Objects默认的算法去计算Employeee的hash码 } //补充说明下Objects的equals方法 等价于将比较两个对象的值是不是相等 @Override public boolean equals(Object obj) { if(obj == this)return true; //如果他们两个在内存中的地址一样那么他们肯定是同一个对象 if(obj == null) return false; //null和任何对象都不相等 放在第一个过滤条件 if(obj.getClass() != getClass()) return false; //如果两个对象不是采用同一个类模板生成的 那么他们一定不会相等 //通过了上面的校验证明obj是可以强转为Employee的 Employee ee = (Employee)obj; return Objects.equals(name, ee.getName()) && Objects.equals(age, ee.getAge()); } @Override public String toString() { return "name : " + name + " age : " + age; } }
测试类
public class TestEmployee { public static void main(String[] args) { Employee ee = new Employee("张三",19); Employee ee2 = new Employee("张三",19); Employee ee3 = new Employee("李四",19); Employee ee4 = new Employee("张三",20); System.out.print("ee.euals(ee) = " + ee.equals(ee) + "\t"); System.out.println(); System.out.print("ee.equals(ee2) = " + ee.equals(ee2) + "\t"); System.out.print("ee.hashCode = " + ee.hashCode()+"\t"); System.out.print("ee2.hashCode = " + ee2.hashCode()+"\t"); System.out.println(); System.out.print("ee.equals(ee3) = " + ee.equals(ee3) + "\t"); System.out.print("ee.hashCode = " + ee.hashCode()+"\t"); System.out.print("ee3.hashCode = " + ee3.hashCode()+"\t"); System.out.println(); System.out.print("ee.equals(ee4) = " + ee.equals(ee4) + "\t"); System.out.print("ee.hashCode = " + ee.hashCode()+"\t"); System.out.print("ee4.hashCode = " + ee4.hashCode()+"\t"); } }
结果
ee.euals(ee) = true ee.equals(ee2) = true ee.hashCode = 24022539 ee2.hashCode = 24022539 ee.equals(ee3) = false ee.hashCode = 24022539 ee3.hashCode = 26104871 ee.equals(ee4) = false ee 4000 .hashCode = 24022539 ee4.hashCode = 24022540
相关文章推荐
- JAVA中重写equals()方法为什么要重写hashcode()方法说明
- Java中重写Object类的equals方法和Hashcode方法的注意事项
- JAVA中重写equals()方法为什么要重写hashcode()方法?
- JAVA中重写equals()方法为什么要重写hashcode()方法?
- JAVA中重写equals()方法为什么要重写hashcode()方法说明
- java 重写类的equals方法和hashcode方法
- JAVA中重写equals()方法的同时要重写hashcode()方法
- Java中==、equals、hashcode的区别与重写equals以及hashcode方法实例(转)
- java 重写HashCode和equals方法以及 HashMap集合 增 删 改 查
- JAVA中重写equals()方法为什么要重写hashcode()方法?
- JAVA中重写equals()方法为什么要重写hashcode()方法?
- JAVA中重写equals()方法为什么要重写hashcode()方法说明
- JAVA中重写equals()方法为什么要重写hashcode()方法说明
- 学习笔记-JAVA-考点10-什么情况下需要重写equals和hashcode()两个方法?
- java equals与hashCode 两个重要方法的重写
- JAVA中重写equals()方法为什么要重写hashcode()方法?
- 【Java基础】JAVA中重写equals()方法为什么要重写hashcode()方法?
- JAVA中重写equals()方法为什么要重写hashcode()方法?
- Java中==、equals、hashcode的区别与重写equals以及hashcode方法实例
- 重写Java Object对象的hashCode和equals方法实现集合元素按内容判重