==equals与hashCode

Posted yanze

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了==equals与hashCode相关的知识,希望对你有一定的参考价值。

== 

首先,得说明java数据类型分为基本数据类型和引用数据类型,

基本数据类型有8种:

浮点型:float(4 byte), double(8 byte)

整型:byte(1 byte), short(2 byte), int(4 byte) , long(8 byte)

字符型: char(2 byte)

布尔型: boolean

当使用基本数据类型进行比较,比较的是实际的值,使用引用数据类型进行比较,比较的是存储于内存中的地址。

 

-----------------------------------------------------------------------------------

 

equals

首先,equals是类中定义的方法,不同类的equals方法不一样

eg: 

Object类

public boolean equals (Object obj){
  return (this== obj);  
}

可见对于Object,equals与==一致

而对于其他类,对equals方法进行了重写,多用来判断两者的值是否相等

例如String类对equals方法进行了重写,用来比较指向的字符串对象所存储的字符串是否相等。

 

-----------------------------------------------------------------------------------

 

hashCode

这里先简单介绍一下hash表,注意以下三个词: key关键字,映射关系f(key)又叫hash函数,hash值

散列技术就是在记录的存储位置和它的关键字之间建立一个确定的应关系,关键字key通过映射关系f(key)得出hash值,即存储位置,存储位置是一块连续的存储空间中,称为哈希表

 

hashCode方法就是根据一定的规则将与对象相关的信息(比如对象的存储地址,对象的字段等)映射成一个数值。

若两个对象hashCode相同,不代表他们真的相等,得用equals再确认一次

若两个对象hashCode不同,代表他们真的不相等

 

以上是关于==equals与hashCode的主要内容,如果未能解决你的问题,请参考以下文章

Java equals 方法与hashcode 方法的深入解析

代码安全 | 第十七期:对象只定义了Equals和Hashcode方法之一的漏洞

hashCode()与 equals() 之间的关系

equals与hashcode分析

hashCode与equals的区别与联系

hashcode与equals的作用区别和联系