一、Object类简介
java.lang包中定义的Object类是所有Java类的根父类,其中定义了一些实现和支持面向对象机制的重要方法。任何Java对象,如果没有父类,就默认它继承了Object类。因此,实际上,以前的定义是下面的简略:
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)、比较对象属性值是不是匹配。
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()必须获得相同的整数结果。