java里面的equals和hashcode的总结

问题1:

java比较两个对象,除了equals,为什么还要重写hashcode方法?

基本类型比较,用==就可以了。

对象比较,equals比较是对象的内存地址,hashcode比较的也是对象的内存地址的换算结果因为Object中的hashCode方法返回的是对象本地内存地址的换算结果,不同的实例对象的hashCode是不相同的)。

有时候根据自己的业务逻辑,重写了equals,如果不重写hashcode,两个对象的内存地址肯定不一样,hashcode肯定不一样,那么两个对象肯定不一样,可能跟业务逻辑

不符。比如本来两个对象的两个属性是一样的,这两个对象业务上应该是相等的,但是不重写hashcode,则这两个对象是不相等的,就有矛盾了。比如往HashSet里面添加对象。

http://blog.csdn.net/jiangwei0910410003/article/details/22739953

问题2:

重写hashCode为什么都有31?这是做什么的?

 http://www.iteye.com/topic/257191

http://www.iteye.com/topic/680433

问题3:

object自己的hashCode方法具体是怎么实现的?

public native int hashCode();

native关键字,是java同c语言打交道的接口

见   http://www.enet.com.cn/article/2007/1029/A20071029886398.shtml

好深奥,跟jvm打交道

http://xinglongbing.iteye.com/blog/343484

问题4:

如果两个对象相等,则hashcode相等;如果hashcode相等,则两个对象可能相等也可能不相等。

两个在equals的意义下相等(equal)的对象应该有相等的hash codes(但并没有说hash codes相等就一定equals)

http://bbs.csdn.net/topics/350172637

http://java-min.iteye.com/blog/1416727

可以参考文档地址如下:http://aiou.iteye.com/blog/1973712

posted @ 2014-07-28 15:56  唾手可得的树  阅读(199)  评论(0编辑  收藏  举报