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

一、Object类简介

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

Java代码
public class A extends Object{}

 

二、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代码   
private String uuid;
	
	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + ((uuid == null) ? 0 : uuid.hashCode());
		return result;
	}
	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		T3 other = (T3) obj;
		if (uuid == null) {
			if (other.uuid != null)
				return false;
		} else if (!uuid.equals(other.uuid))
			return false;
		return true;
	}

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

 

五、什么是hashCode?

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

在Java中对hashCode的规定如下:

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

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值