那桐资讯网

首页 > 正文

Java中的==, equals和hashCode方法详解

www.magasincmc.com2020-03-12

文章目录1。数据类型1.1在Java基本类型1.2类2中。对象。EqualObject.hahscode 3。常规等于方法和哈希代码方法3.1之间的关系重写3.3整型。哈希代码和双精度。哈希代码4。对象。具有哈希代码和对象。哈希

1。java数据类型

java数据类型可以大致分为两类:

1.1 basic type

byte,short,char,int,long,float,double,boolean。

变量的初始化:不需要使用新的关键字

来比较它们,应用双等号(===),并比较它们的值。

1.2类

如数组、字符串等。都是班级。

Class的初始化:

当它们与(===)比较时,它们会比较它们在内存中的存储地址。

注意:对于第二种类型,除非是相同的新对象,否则它们的比较结果为真,否则比较结果为假。因为每一次,堆内存空间都会被重新打开。

2 . Object . equalsobject . hahscode

Object . equals :

Object a=new Object();

对象b=新建。对象();

a . equals(b);相当于返回(a==b)。

还说看两个内存地址是否相等。

Object.hashCOde :

的实现根据源代码,Object.hashCOde有几种计算方法,但它们都遵循以下规范:

同一对象(同一内存地址)的hashCOde必须相同,并且两个地址不同的对象的hashcode具有不同的最大概率。

3。一般equals方法和hashcode方法

3.1

之间的关系如果equals方法在Object的子类中被重写,equals方法也必须被重写,以确保当equals方法返回true时,调用hashCode方法的两个对象的返回值必须相等。(为了在散列集中找到两个相等对象的相同位置)

3.2方法重写

String、Math、Integer、Double等。当使用equals()方法时,这些封装类已经涵盖了对象类的equals()方法。他们不再根据存储地址而是根据内容来判断两者是否相等。因此,hashcode方法也被重写,两个对象的hashcode具有相同的内容,如字符串、数学、整数、双精度等。必须相等。

3.3Integer.hashCode和Double.hashCode

如果要返回hashCode的基本类型,如int/double,需要先转换成相应的封装类。

而整数和双精度类提供了无需类型转换即可直?臃祷氐木蔡椒ā?

4。hashCode和Objects.hash

Objects类为操作对象提供了一组静态方法。

Objects.hashCode(a) **相当于. hashCode(),也可以直接用于基本类型,如int、double等。* *此外,当a==null时,返回0,非常安全。

如果一个类的hashCode是由几个实例域决定的,那么obects.hash (a,b,c,)可以被调用。它结合了object.hashcode (a)、object.hashcode (b、)。

-

热门浏览
热门排行榜
热门标签
日期归档