当前位置:七道奇文章资讯编程技术Java编程
日期:2011-03-22 16:13:00  来源:本站整理

Java中Object类的equals()和hashCode()办法深化解析[Java编程]

赞助商链接



  本文“Java中Object类的equals()和hashCode()办法深化解析[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:

1.equals()

在初学Java的时刻,很多人会说在对比对象的时刻,==是对比地址,equals()是对比对象的内容,谁说的?

看看equals()办法在Object类中的定义:

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

这是对比内容么?明显是对比指针(地址)么...

但是为什么会有equals是对比内容的这种说法呢?

因为在String、Double等封装类中,已经重载(overriding)了Object类的equals()办法,于是有了另一种计算公式,是举行内容的对比.

比方在String类中:

public int hashCode() {
     int h = hash;
     if (h == 0) {
         char val[] = value;
         int len = count;
         for (int i = 0; i < len; i++) {
             h = 31*h + val[off++];
         }
         hash = h;
     }
     return h;
}

2.hashCode()

在Object类中的定义为:

public native int hashCode();

是一个本地办法,返回的对象的地址值.

但是,一样的思绪,在String等封装类中对此办法举行了重写.办法调用得到一个计算公式得到的int值

3.二者的关系

①两个obj,假如equals()相等,hashCode()一定相等

②两个obj,假如hashCode()相等,equals()不一定相等

缘由:从散列的角度考虑,差别的对象计算哈希码的时刻,大概惹起冲突,大家一定还记得数据构造中冲突的办理筹划吧

但是要这么计划,用两个函数,个人的理解是为了对比两个对象时更高效.

可以考虑在Java调集合,判断两个对象能否相等的法则是:

第一步,假如hashCode()相等,则查看第二步,不然不相等;

第二步,查看equals()能否相等,假如相等,则两obj相等,不然还是不相等.

为什么这样做?个人的理解是让得当的函数完成得当的功效,毕竟hashCode()比equals()在某种程度上来得快.


  以上是“Java中Object类的equals()和hashCode()办法深化解析[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
  • 利用Javascript实现网页水印(非图片水印)
  • Java开辟环境的搭建
  • Ubuntu java安装与配置
  • 办理Ubuntu 10.04 Firefox3.6 Java浏览器插件不工作的问
  • Ubuntu重装后Java环境的设置
  • Sun Java进入Ubuntu 10.10软件中央
  • Ubuntu 10.10配置Java开辟环境
  • 在Ubuntu 10.10中配置Java环境变量的办法
  • Ubuntu下Java环境的搭建
  • Ubuntu 10.04 下安装 Java, JRE
  • Ubuntu 10.04下的搭建SUN JAVA开辟环境
  • Ubuntu 12.04安装java7
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .