Object类-equals()、==、hashCode()

来源:互联网 发布:蚂蚁公舍 上海 知乎 编辑:程序博客网 时间:2024/06/07 01:46

一、Object类简介

java.lang包中定义的Object类是所有Java类的根父类,其中定义了一些实现和支持面向对象机制的重要方法。任何Java对象,如果没有父类,就默认它继承了Object类。因此,实际上,以前的定义是下面的简略:

Java代码

 

二、equals方法

Object类定义的equals方法用于判别某个指定的对象与当前对象(调用equals方法的对象)是否等价。数据等价的基本含义是指两个数据的值相等。

 

三、equals方法与“==”运算符的关系

1、equals()方法只能比较引用类型,“==“可以比较引用类型及基本类型;

2、默认的equals()方法比较的是内存地址,基本等同于”==“,但对于类File、String、Date及包装类来说,是比较的值而不是内存地址,这是因为它们内部覆盖实现了equals()方法;

3、”==“进行比较的时候,引用类型数据比较的是引用即内存地址,基本数据类型比较的是值。它是会自动的去进行转换的。

 

四、覆盖equals()方法

覆盖之前equals和==比较的都是内存地址,覆盖equal的一般步骤如下:

(1)、用==检查是否参数就是这个对象的引用;

(2)、判断要比较的对象是否为null,如果是null,返回false;

(3)、用instanceof判断参数的类型是否正确;

(4)、把参数转换成合适的类型;

(5)、比较对象属性值是不是匹配。

 

Java代码  

重要规则:覆盖equals()应该连带覆盖hashcode()

 

五、什么是hashCode?

实际上,由Object类定义的hashCode方法确实会针对不同的对象返回不同的整数。(这一般是通过将该对象的内部地址转换成一个整数来实现的,但是Java编程语言不需要这种实现技巧)你可以这样理解hashCode,它获取对象在内存中的地址并加以某种算法而计算得来,它是对象的散列码值。主要用来在集合中实现快速查找等操作,也可以用于对象的比较。

在Java中对hashCode的规定如下:

1、在同一个应用程序执行期间,对同一个对象调用hashCode(),必须返回相同的整数结果。至于同一个应用程序在不同执行期所得的结果无需一致;

2、如果两个对象被equals(Object)方法视为相等,那么对这两个对象调用hashCode()必需返回相同的整数结果;

3、如果两个对象被equals(Object)方法视为不相等,那么对这两个对象调用hashCode()必须获得相同的整数结果。

0 0
原创粉丝点击