基本特性:
Object类的结构图:

- Java Object类 是所有类的父类,Java所有类都继承于Object类,万类之根,所有继承Object类都可以使用它的所有方法
- 创建一个类时,如果没有继承一个父类,则会自动继承Object
- 在Java中,只有基本类型的值不是对象,而所有的数组类型等都要扩展于Object类型
方法介绍:
toString方法
- 用于返回表示对象的字符串(类名+@+16进制的hashcode)
- toString方法都遵循这样的格式:类的名字,随后是一对方括号(或者花括号)括起来的域值,下面是创建了一个Student类,然后使用IDEA默认生成的toString()方法
toString方法建议重写
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
equals方法
在Object类中,equals方法判断两个对象是否具有相同引用,equals方法默认比较两个对象的hascode,是同一个对象的引用时返回ture,反之返回false。
- 如果重写equals方法,必须重写定义hashCode方法,以便用户可以将对象插入到散列表中。
equals具有下面的特性:
- 自反性:对于任何非空引用xxx类,xxx.equals(yyy)应该返回true
- 对称性:对应任何引用xxx类和yyy类,如果xxx.equals(yyy)返回true,那么yyy.equals(xxx)也返回true
- 传递性:对于任何引用x,y和z,如果x.equals(y)返回true,y.equals(z)返回true,那么x.equals(z)也应该返回true
- 一致性:如果x和y引用的对象没用发生变化,那么反复调用x.equals(y)应该返回同样的结果
- 对于人类非空引用x,x.equals(null)应该返回false
重写equals案例:
public class TeacherMain {
public static void main(String[] args) {
Teacher teacher01 = new Teacher("01","韦老师");
Teacher teacher02 = new Teacher("01","韦老师");
//会输出true,如果teacher没有重写equals,则会返回false
System.out.println(teacher01.equals(teacher02));
}
}
public class Teacher {
private String teacherId;
private String teacherName;
public Teacher(String teacherId, String teacherName){
this.teacherId = teacherId;
this.teacherName = teacherName;
}
@Override
public boolean equals(Object o) {
if (this == o) { return true; }
if (o == null || getClass() != o.getClass()) { return false; }
Teacher teacher = (Teacher) o;
return Objects.equals(teacherId, teacher.teacherId) &&
Objects.equals(teacherName, teacher.teacherName);
}
@Override
public int hashCode() {
return Objects.hash(teacherId, teacherName);
}
}
hashCode方法
- hashCode方法可以获得一个对象的内存地址值
- 返回该对象的哈希码值。默认情况下,该方法会根据对象的地址来计算。
- 不同的对象哈希码值一般都不会相同,同一个对象的哈希值一定相同
- new一个对象反复输出可以看出它的hashCode值是不变的
getClass方法
返回这个运行时所产生的这个对象