zoukankan      html  css  js  c++  java
  • Java中equals方法和hashCode方法的关系

    equals()和hashCode()都是Object类中定义的方法,所有类都有这两个方法

    Object类中equals方法的代码如下:

    public boolean equals(Object obj) {
        return (this == obj);
    }

    当不对equals()重写时,默认是使用的是“==”进行对对象的地址进行比较,地址相同则返回true,如下

    MyObject a = new MyObject(123);

    MyObject b = new MyObject(123);
    a.equals(b);// a和b的内容是相同的,但是地址不同,所以equals返回值为false

    自定义的类实例进行内容比较时,需要重写equals()方法,而String等类已经重写了equals()方法。

    hashCode()方法作用是计算对象的哈希值。该方法一般使用场景是把对象保存在需要计算哈希值的类中(如HashMap,Hashtable,HashSet)。

    MyObject a = new MyObject(123);
    
    MyObject b = new MyObject(123); 
    
    a.equals(b);// 假设equals被重写为对123进行比较,返回true
    
    Map<MyObject> mp = new hashMap<>();
    
    mp.add(a);
    
    mp.add(b);

    System.out.println(a.hashCode(),b.hashCode());// hashCode()方法没被重写,这里a和b的哈希值不同

    两个对象equals比较返回true,仍然可以同时存在hashMap中。

    为了和equals方法保持一致--euqals返回true时,两个对象的hashcode方法返回值相同;两个对象的hashcode不同时,equals方法返回false。

    则需要对hashCode()方法进行重写。如:

    @override
    public int hashCode(){  
        int hash =  property1.hashCode();
        return property1 ^ property2;
    }
    作者:Hahallo
             
    本文版权归作者和博客园共有,未经作者同意不能转载,否则保留追究法律责任的权利。
  • 相关阅读:
    centos7安装kubenetes
    用户密码字典
    curl使用
    docker部署rabbitmq集群
    记一次使用docker搭建fastdfs服务的过程
    filebeat删除多余标签
    Python format格式化输出
    python3 统计NGINX pv uv 最多IP访问
    linux修改网卡名为eth0
    模式查找
  • 原文地址:https://www.cnblogs.com/bigyang/p/15177712.html
Copyright © 2011-2022 走看看