hashCode()和equals()之间的关系
在Java中,每个对象都有自己的hashCode值,就像每个人都有指纹一样,可以把hashCode理解成指纹,但是和指纹又不完全一样
- 如果两个对象的hashCode值不相同,那么这两个对象肯定不是一个对象
- 如果两个对象相等,那么他们的hashCode一定相等
- (和指纹不一样,指纹是每个人都不重复的,但是hashCode是可以重复的)如果两个对象的hashCode相同,不代表是一个对象,也可能是两个对象。
/** * @author: Mr.Wu * @description hashCode()和equals()的关系 * @date: 2021/12/29 22:36 */ public class HashCodeAndEquals { public static void main(String[] args) { HashMap<Users,String> hashMap=new HashMap<>(); hashMap.put(new Users("zhangsan"),"123"); String s = hashMap.get(new Users("zhangsan")); System.out.println(s); } } class Users{ private String username; public Users(String username) { this.username = username; } @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; Users users = (Users) o; return username.equals(users.username); } @Override public int hashCode() { //重写hashCode之后,程序会根据要求,根据username生成对应的hashCode值 return Objects.hash(username); } }
在Java中的一些集合类的实现中,要比较两个对象是否相等时,首先会比较hashCode值,如果不相等则就不是同一个对象,不用进行equals比较;如果hashCode相等,再去进行equals比较。equals方法是确定两个对象最终是否相等的。equals方法的实现比较重逻辑,而hashCode()得到的就是一个hash值。
重写了equals方法之后,一定要根据equals方法重写hashCode方法!!
本文来自博客园,作者:(HelloWorld!),转载请注明原文链接:https://www.cnblogs.com/Simon-s/articles/15747062.html --有志者,事竟成

浙公网安备 33010602011771号