package com.java.equals; import java.util.HashMap; /** * 关于HashCode和Equals * @author yfding * */ public class EqualsTest { public static void main(String[] args) { /** * 概念 * equals:判断是否同一个实例,一般需要重写 * ==:判断对象实例的内存地址,判断是否同一个实例,判断实例是否物理相等 * hashcode:使用hash算法,给对象一个唯一的int值,实例的hash码 * */ String str1 = new String("yfding"); String str2 = new String("yfding"); System.out.println(str1==str2); System.out.println(str1.equals(str2)); // return true;虽然指向地址不同,但String重写了equals方法 System.out.println(str1.hashCode() + "---" + str2.hashCode()); // 相同,String重写了hashcode方法 person p1 = new person(18,"yfding"); person p2 = new person(18,"yfding"); System.out.println(p1.equals(p2)); // 需重写equals方法,否则返回false System.out.println(p1.hashCode() + "---" + p2.hashCode()); // 需重写hashcode方法,否则返回false HashMap<person, String> map = new HashMap<person,String>(); map.put(p1, "1"); map.put(p2, "1"); /**Map 集合先判断hashcode,再判断equals,都相同则覆盖,不相同则添加 * 如果两个对象相同,那么它们的hashcode一定相同 * 如果两个对象的hashcode相同,它们不一定相同 * 使用hashcode大大提高了Map集合添加元素的效率,减少了判断equals的次数(hashcode不相同,默认两个实例不相同)*/ System.out.println(map.size()); } } class person{ private int age; private String name; public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public person(int age, String name) { super(); this.age = age; this.name = name; } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + age; result = prime * result + ((name == null) ? 0 : name.hashCode()); return result; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; person other = (person) obj; if (age != other.age) return false; if (name == null) { if (other.name != null) return false; } else if (!name.equals(other.name)) return false; return true; } }
关于hashcode和equals方法
猜你喜欢
转载自yfding.iteye.com/blog/2331792
今日推荐
周排行