• 帮助
    • 博客
    • 相册
    • 网盘
    • 超市
    • Xer吧
  • 登录
  • 注册
【公告】2008北京奥运会盘点---X5dj半月刊2008年第16期上线    【活动】“我的奥运我的家”――第二届X5dj模板DIY大赛,参与就有惊喜!    【公告】一边DIY,一边赚积分!--模板DIY共享功能上线!    【公告】新增用户操作记录展示功能,帮助您更好的与朋友们互动    【公告】X5dj新功能汇总贴:新增“密码目录”功能上线    【公告】X5dj.com相册/网盘上传工具发布    
  • ironlong的心情驿站
  • http://www.x5dj.com/ironlong 复制地址
  • 首页

  • 博客

  • 相册

  • 网盘

  • 人际关系网

loading...
JAVA:感受基于接口的Framwork的威力 < 上一篇 下一篇 > JAVA六种异常处理的陋习
Java中的equals
ironlong 发表于: 2008-03-25 16:03 来源:转载  X度:0  浏览:(109)  评论:(0)
收藏 | 复制地址 | [举报此文章] |  大 中 小 |  引用 删除 修改

Java中的equals

Java中的所有对象都默认继承了Object的equals方法,在开发中,经常需要显式地覆盖(Override)这一方法,保证对象相等运算的正确性。

参阅Java的文档,可以知道,实现equals方法,需要满足以下几个条件:

  • 自反性:x.equals(x)必须返回true;
  • 对称性:若x.equals(y)为true,则y.equals(x)必须同时为true;
  • 传递性:若x.equas(y)为true且y.equals(z)为true,则x.equals(z)必须也为true;
  • 对于所有非空对象x,调用x.equals(null)应该返回false;

按照我的经验,在实践中还应该注意两点:

1) 不但要保证相等的对象确实“相等”,还应保证不相等的对象确实“不相等”:有可能出现的情况是,某个equals方法对除null外的所有参数均返回true,此时,该方法符合上面的四条特性,但它决不是一个逻辑正确的方法;

2) 在实现equals方法的同时,必须同时实现hashCode方法:hashCode方法也是从Object继承而来的,按照Java文档的建议,两个方法应该同时实现,并且保证equals为真的两个对象具有相同的hashCode值。

原因在于:如果仅仅调用Object的hachCode方法,JVM会根据对象在内存中的位置计算hashCode,有可能两个逻辑相等的对象会得到不同的散列值,而这是违背Hash的逻辑含义的。

补充一点:
如果需要用Collection来处理某种对象,最好是显式地实现hashCode方法。因为,如果向某个Collection(例如HashMap, HashSet)中添加多个对象,这些对象在内存中的位置可能非常靠近,因此都被散列到第一个桶(bucket)中,在这种情况下,访问Collection中元素的时间代价将由O(1)降低为O(n),对程序效率的影响极大。
如果没有找到好的hashCode算法,可以利用Apache Commons提供的HashCodeBuilder方便地实现hashCode。
 
系统分类:行业·专业
标签:行业   专业   
推送: 无分类 归类:综合

热爱篮球...热爱摇滚...
 
JAVA:感受基于接口的Framwork的威力 < 上一篇 下一篇 > JAVA六种异常处理的陋习
用户回复
首页 上一页 1 下一页 尾页 共 1 页
评分与快速回复
博主推荐
  • · 30极品美女!作为礼物送给大家!
相关文章
  • ·抓紧时间,努力工作!
  • ·物流的兄弟同病相怜
  • ·薄膜开关等聚酯薄膜印刷回路用的紫外线硬化型绝缘油墨
  • ·15个办法提高你的肢体语言
  • ·常用中成药的真相——排毒养颜胶囊(转)
  • ·常用中成药的真相——六味地黄丸(转)
博友热推
  • 新功能:“模板DIY共享”上线
  • 我的奥运我的家X5dj模板DIY大赛
  • 醉生梦死在慢摇吧里面的寂寞男人
  • 自己的记忆要靠别人的记录去寻找
  • 大学校长:停止往学生脑子里灌屎
  • 做不到冷眼旁观,索性就闭上眼睛
  • 外国闲人研究表明确有外星人存在
  • 残奥会让我感受到身残志坚的精神
  • 不能让孩子一辈子活在虚拟世界中
  • 只要不放弃,就能达到辉煌的顶峰
关于我们 | X5dj动态 | 加入我们 | 友情链接 | 官方日志 | 免责声明 | 举报不良信息
北京开创明天科技有限公司 版权所有 京ICP证040979号