Chinaunix首页 | 论坛 | 博客
  • 博客访问: 434292
  • 博文数量: 54
  • 博客积分: 610
  • 博客等级: 上士
  • 技术积分: 721
  • 用 户 组: 普通用户
  • 注册时间: 2011-01-24 10:52
文章分类

全部博文(54)

文章存档

2013年(27)

2012年(11)

2011年(16)

分类: Java

2013-05-22 20:00:55

众所周之,String 、Math、还有Integer、Double。。。。等这些封装类重写了Object中的equals()方法,让它不再比较句柄(引用),而是比较对象中实际包含的整数的值,即比较的是内容。而Object的equals()方法比较的是地址值。

 

一般来说,如果你要把一个类的对象放入容器中,那么通常要为其重写equals()方法,让他们比较地址值而不是内容值。特别地,如果要把你的类的对象放入散列中,那么还要重写hashCode()方法;要放到有序容器中,就要重写compareTo()方法。

 

为什么要重写hashCode方法?

 

我们应该先了解java判断两个对象是否相等的规则。

 

在java的集合中,判断两个对象是否相等的规则是:


首先,判断两个对象的hashCode是否相等

如果不相等,认为两个对象也不相等
如果相等,则判断两个对象用equals运算是否相等
如果不相等,认为两个对象也不相等
如果相等,认为两个对象相等

 

我们在equals方法中需要向下转型,效率很低,所以先判断hashCode方法可以提高效率


阅读(1648) | 评论(2) | 转发(0) |
给主人留下些什么吧!~~

blue_11102013-09-29 20:38:48

http://blog.csdn.net/i_lovefish/article/details/8042883

blue_11102013-09-29 20:38:23

http://www.blogjava.net/Jkallen/archive/2012/06/18/27653.html