Object类
1.1 Object类概述
Object是Java中所有类的基类,万物都是Object。
Object规定了每一个的唯一标记:
hashCode方法
比较方式
equals方法
字符串期望方法
String toString();
线程操作相关方法:
notify
notifyAll
wait
2.2 equals方法重写
boolean equals(Object obj);
是Object类内规定的两个对象比较使用方法,如果两个对象为同一个对象,返回true,否则返回false
【默认方式】
比较参数对象和调用方法对象的空间首地址。
地址相同的两个对象,一定是同一个对象。
/*
* 重写equals流程/内容
* 1. 原则不变,地址相同的两个对象为同一个对象,返回true
* 2. 参数类型和当前调用方法的数据类型一致!!!【数据类型判断】
* 3. 比较两个对象中数据元素
*/
@Override
public boolean equals(Object obj) {
// 1. 原则不变,地址相同的两个对象为同一个对象,返回true
if (this == obj) {
return true;
}
/*
* 2. 参数类型和当前调用方法的数据类型一致!!!【数据类型判断】
* instanceof 关键字
* obj instanceof Person
* 判断obj对应的数据到底是不是Person类型。是返回true,否则返回false
*/
if (!(obj instanceof Person)) {
return false;
}
/*
* 3. 比较两个对象中数据元素
* 当前参数对象通过以上两步验证,可以明确不是同地址对象,同时和当前方法调用对象类型一致。
* 可以明确obj引用数据类型指向的数据是一个Person对象。参数对象目前对外数据效果为Object
* 类型。我们需要拔掉衣服看本质,【强制类型转换】
*/
Person p = (Person) obj;
return this.id == p.id
/*
* this.name.equals(p.name)
* 该equals方法为String类型equals方法,也是重写Object类内的equals完成
* 为了满足字符串比较使用。
*
* 字符串比较绝对不允许使用 ==
*
* 【必须明确每一个方法的执行者到底是谁!!!】
*/
&& this.name.equals(p.name)
&& this.age == p.age;
}
2.3 hashCode方法重写
Java中的规定
两个对象通过equals方法比较结果为true,要求hashCode结果一致。
在Object类内
hashCode方法返回值数据是当前对象在内存空间中的地址十进制数据
@Override
public int hashCode() {
/*
* Objects工具类方法
* int hash(Object... values);
* ... 不定长参数,要求当前参数的类型为Object类型,参数个数不限制。
* 不定长参数在方法内实际上是一个数组形式
* Object... ==> 方法内就是一个Object[]
*
* hash方法可以将当前给予方法的参数进行hash计算,得到一个hash值。
* 这里要求参与equals方法比较的成员变量,全部放入到hash方法中进行
* 哈希值获取操作。
*/
return Objects.hash(id, name, age);
}