比较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()方法。
一、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()方法。
相关文章推荐
- Java学习之equals()、hashCode()、identityHashCode()、toString()和==
- 关于java中比较所用的"=="与s.equals()方法的不同
- java equals 和 "==" 比较
- Java 中的"=="和equals()方法比较总结。
- Effective Java 英文 第二版 读书笔记 Item 9:Always override hashCode when you override equals
- java == equals hashcode 详解
- java中"equals"和"=="的区别比较
- java中equals()函数和"=="的区别
- (2) java中Object类源码 以及 equals hashcode ==三者区别联系 以及权限修饰符 以及重写和重载
- java-数值,对象比较---"=="和"equals"以及自动装箱后的比较
- Java中== equals hashcode解析
- StarUML 启动时候出现"System Error. Code:1722. RPC服务器不可用."
- Working with hashCode and equals methods in java
- JDK源码学习--System.identityHashCode(Object)
- Java 学习笔记-基础-"=="和equals()的区别。
- java的String的equals方法和"=="比较
- Java hashCode() 和 equals()的若干问题解答
- 【Java学习笔记之二十九】Java中的"equals"和"=="的用法及区别
- 关于System.identityHashCode(obj) 与 obj.hashcode()
- 【Java面试题】3 Java的"=="和equals方法究竟有什么区别?简单解释,很清楚