您的位置:首页 > 编程语言 > Java开发

比较Java中"hashCode" "equals" "==" "System.identityhashcode"

2013-12-20 21:56 411 查看
去看HashMap实现的时候,提到hashCode方法和equals方法,就去全面了解了一下。

一、hashCode
hashCode可以理解为表示一种全局唯一的数字(散列值)。他代表了一个对象在该应用中的唯一性。小概率重复。hashCode其实是为集合准备的,比如HashMap。HashMap是不允许2个相同的key指针或者key.equals()同时存在,相同的key.hashCode()会存在数组的同个位置(数组的element类型是一个链表,为了解决hashcode相同但指针或者equals不同的情况,这个问题可以参考这篇文章http://blog.csdn.net/cages/article/details/7311622)。根据key.hashCode的值将对象放到数组的对应位置(hashMap底层是数组和链表的合体,这篇文章介绍了hashmap的实现http://www.iteye.com/topic/539465/)。
需要提一下的是Object的hashCode内部是使用指针地址计算出来的hash值比较的,而String则重载了这个方法,比较的是值(可以这么理解,通过字符计算出来的哈希值)。
另外,eclipse有个自动生成hashCode和equals重载的工具:source->generate hashCode() and equals()

二、equals
判断规则是取决于各自对象的实现。
Object比较的是指针(object1==object2),而String比较的是值,因为String重载了该方法。

三、==
很简单,比较的是指针,就是内存地址。极小概率有可能重复。

四、System.identityhashcode()
对象的hashCode方法往往会被重载,所以要取到原生的hashCode就可以通过改方法获得,就是Object对象的hashCode()方法。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: