1.Object类的概述
java中所有类的基类
java中所有类都是间接或者直接继承Object类
Object类的引用数据类型变量可以保存java中任意数据类型的首地址
Object类内规定了一些方法:
String toString();
当前对象建议String类型描述,默认情况是当前类所属报名.类名@十六进制内存地址
如果对于数据类型展示有要求,可以重写toString方法,在展示的方法中会默认执行toString方法
int hashCode();
内存中当前对象的唯一索引值,默认情况下是当前对象所处空间首地址的十进制 展示
boolean equals();
比较方法,判断两个对象是否一致,Object类默认情况下比较的方式是地址比较。两个对象地址一致,表示肯定是相同对象,如果我们期望修改equals比较规则,可以再当前类内重写
【注意】: java中规定,如果两个对象的equals比较方法结果为 true,要求hashCode值必须一致
线程有关方法:
void wait();
void notify();
void notifyAll();
Class<?> getClass();
1.2 toString 方法
目前大家真实数据时,需要考虑使用的方法,可以通过sout方法直接展示对应的对象内容
package Object;
public class Student {
private int id;
private String name;
private int age;
private char gender;
public Student() {
super();
}
public Student(int id, String name, int age, char gender) {
super();
this.id = id;
this.name = name;
this.age = age;
this.gender = gender;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public char getGender() {
return gender;
}
public void setGender(char gender) {
this.gender = gender;
}
@Override
public String toString() {
return "Student [id=" + id + ", name=" + name + ", age=" + age + ", gender=" + gender + "]";
}
}
package Object;
public class Demo1 {
public static void main(String[] args) {
Student student = new Student(1,"小刘",16,'男');
System.out.println(student);
}
}
1.3equals方法
比较两个对象是否一致,在Object类内默认方式是比较两个对象地址是否一致。
/**
* 重写equals方法
* 1.判断两个对象是不是同一个对象。如果调用方法的类对象和传入参数类对象地址一致,那就是同一个对象,返回true
* 2.equals 方法参数是Object类型,那也就是说任何类型的数据都可以作为参数,两个数据类型不一致是否进行比较操作
* 使用关键字istanceOf,同数据类型继续运行,非同类型,结束判断返回false
*
* 3.判断对象中保存的数据
* Student中我们比较 id name age gender就可以了
*
*/
@Override
public boolean equals(Object obj) {
// 1.判断不是不是同地址对象
if(this == obj){
return true;
}
//2. 数据类型是否一致
if(!(obj instanceof Student)){
return false;
}
//数据强制类型转换
Student stu = (Student) obj;
return this.id == stu.id
//this.name.equals(stu.name) 该equals方法时String类equals方法
&&this.name.equals(stu.name)
&&this.age == stu.age
&&this.gender == stu.gender;
}
1.4hashCode方法
在Object类内,hashCode方法,返回的内容是当前对象的空间首地址十进制展示方式
当前类重写equals方法之后,两个当前类对象比较结果为true,那么要求这两个对象的hashCode必须一致!
hashCode使用有一个唯一原则。一般会参考参与equals比较的所有成员变量来组成成员对应的hashCode,这里会使用到一些java中提供计算哈希值的方法。
hashCode使用未进行重写的情况下,会使用地址作为hashCode对应的数据,重写之后,不再使用地址,重写之后hashCode不对应当前对象所在地址
本文深入解析Java中Object类的功能与作用,包括toString、equals、hashCode方法的原理与重写技巧,以及线程相关方法的介绍。

被折叠的 条评论
为什么被折叠?



