zoukankan      html  css  js  c++  java
  • Java equals(),== 和 hashcode()

    首先来看看equals() 和 "==" 的关系

    1.在Java中==是用来比较两个对象的内存地址是否相同的,如果是基本类型的话将会比较其值。
    2.equals()我们如果使用的是没有重新的方法的话是==是一样的,但是很多时候我们使用的都是重写了的方法。
    equals()在Object类中,其源码如下,可以看出是就是使用了==

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

    但比如我们经常使用equals()进行字符串的比较,在String类中,其源码如下,可以看出是如何比较两个字符串的值是否相同的:

    public boolean equals(Object anObject) {
        if (this == anObject) {
            return true;
        }
        if (anObject instanceof String) {
            String anotherString = (String)anObject;
            int n = value.length;
            if (n == anotherString.value.length) {
                char v1[] = value;
                char v2[] = anotherString.value;
                int i = 0;
                while (n-- != 0) {
                    if (v1[i] != v2[i])
                        return false;
                    i++;
                }
                return true;
            }
        }
        return false;
    }
    

    接下来了解下hashcode()

    hashcode()的作用是获取哈希码,其也是在Object类中的,JDK调用了native方法进行获取,原理就是输入任意长度都会输出固定长的一个内容,但是不同的输入可能存在相同的输出,也就时对象不同哈希可能相同,但是的哈希码不同对象一定不同,也就是产生碰撞了,如果是MD5的算法的话也是类似,但是不同的输入输出是不同的。获取的哈希码是按键值对(key,value)进行存储的。

    要之何用?

    我们知道Set集合具有元素唯一性的特点,但它是如何保证其唯一的呢?
    我们将一个对象存入Set时,会先获取对象的哈希码,然后与Set中的对象进行比较,如果相同的就说明其内已经有这个对象了,就不添加进集合,但是如果不同的话,也并不是说没有这个对象,然后会调用equals()进行比较,如果相同的话,还是不进行添加,如此好像没有很大作用,但是其目的是提高比较的效率,减少使用equals()

    案例场景

    参考:

  • 相关阅读:
    今日大跌!
    web servers
    ASP.NET2.0缓存机制
    赚钱的总是史玉柱?
    asp.net速查手册
    为伊消得人憔悴,我的2007成就难有,内心彷徨
    success
    失守4600点
    Linux下chkconfig命令详解
    FTP批处理下载木马
  • 原文地址:https://www.cnblogs.com/flytree/p/13305923.html
Copyright © 2011-2022 走看看