java 中的 ==, equals 与 hashcode 的区别与联系

java 中的 ==, equals 与 hashcode 的区别与联系

ID:33520590

大小:122.00 KB

页数:14页

时间:2019-02-26

java 中的 ==, equals 与 hashcode 的区别与联系_第1页
java 中的 ==, equals 与 hashcode 的区别与联系_第2页
java 中的 ==, equals 与 hashcode 的区别与联系_第3页
java 中的 ==, equals 与 hashcode 的区别与联系_第4页
java 中的 ==, equals 与 hashcode 的区别与联系_第5页
资源描述:

《java 中的 ==, equals 与 hashcode 的区别与联系》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、Java中的==,equals与hashCode的区别与联系(文章来源:北大青鸟成都锦江)一、概述1、概念·==: 该操作符生成的是一个boolean结果,它计算的是操作数的值之间的关系·equals: Object的 实例方法,比较两个对象的content是否相同·hashCode: Object的 native方法 ,获取对象的哈希值,用于确定该对象在哈希表中的索引位置,它实际上是一个int型整数二、关系操作符==1、操作数的值·基本数据类型变量在Java中有八种基本数据类型:浮点型:float(4byte),doubl

2、e(8byte)整型:byte(1byte),short(2byte),int(4byte),long(8byte)字符型:char(2byte)布尔型:boolean(JVM规范没有明确规定其所占的空间大小,仅规定其只能够取字面值”true”和”false”)对于这八种基本数据类型的变量,变量直接存储的是“值”。因此,在使用关系操作符==来进行比较时,比较的就是“值”本身。要注意的是,浮点型和整型都是有符号类型的(最高位仅用于表示正负,不参与计算【以byte为例,其范围为-2^7~2^7-1,-0即-128】),而char

3、是无符号类型的(所有位均参与计算,所以char类型取值范围为0~2^16-1)。·引用类型变量 在Java中,引用类型的变量存储的并不是“值”本身,而是与其关联的对象在内存中的地址。比如下面这行代码,Stringstr1;这句话声明了一个引用类型的变量,此时它并没有和任何对象关联。   而通过new来产生一个对象,并将这个对象和str1进行绑定:str1=newString("hello");那么str1就指向了这个对象,此时引用变量str1中存储的是它指向的对象在内存中的存储地址,并不是“值”本身,也就是说并不是直接存储的

4、字符串”hello”。这里面的引用和C/C++中的指针很类似。2、小结因此,对于关系操作符==:·若操作数的类型是基本数据类型,则该关系操作符判断的是左右两边操作数的值是否相等·若操作数的类型是引用数据类型,则该关系操作符判断的是左右两边操作数的内存地址是否相同。也就是说,若此时返回true,则该操作符作用的一定是同一个对象。三、equals方法1、来源   equals方法是基类Object中的实例方法,因此对所有继承于Object的类都会有该方法。      在Object中的声明:publicbooleanequals

5、(Objectobj){}2、equals方法的作用  初衷: 判断两个对象的 content 是否相同为了更直观地理解equals方法的作用,我们先看Object类中equals方法的实现。publicbooleanequals(Objectobj){return(this==obj);}很显然,在Object类中,equals方法是用来比较两个对象的引用是否相等,即是否指向同一个对象。但我们都知道,下面代码输出为true:publicclassMain{publicstaticvoidmain(String[]args)

6、{Stringstr1=newString("hello");Stringstr2=newString("hello");System.out.println(str1.equals(str2));}}原来是String类重写了equals方法:publicbooleanequals(ObjectanObject){//方法签名与Object类中的一致if(this==anObject){//先判断引用是否相同(是否为同一对象),returntrue;}if(anObjectinstanceofString){//再判断类型

7、是否一致,//最后判断内容是否一致.StringanotherString=(String)anObject;intn=count;if(n==anotherString.count){charv1[]=value;charv2[]=anotherString.value;inti=offset;intj=anotherString.offset;while(n--!=0){if(v1[i++]!=v2[j++])returnfalse;}returntrue;}}returnfalse;}即对于诸如“字符串比较时用的什么方

8、法,内部实现如何?”之类问题的回答即为:使用equals方法,内部实现分为三个步骤:·先 比较引用是否相同(是否为同一对象),·再 判断类型是否一致(是否为同一类型),·最后 比较内容是否一致Java中所有内置的类的equals方法的实现步骤均是如此,特别是诸如Integer,Double

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。