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方法!!
posted @ 2021-12-29 22:50  (HelloWorld!)  阅读(107)  评论(0)    收藏  举报