基本特性:

Object类的结构图:
image.png

  • Java Object类 是所有类的父类,Java所有类都继承于Object类,万类之根,所有继承Object类都可以使用它的所有方法
  • 创建一个类时,如果没有继承一个父类,则会自动继承Object
  • 在Java中,只有基本类型的值不是对象,而所有的数组类型等都要扩展于Object类型

方法介绍:

toString方法

  • 用于返回表示对象的字符串(类名+@+16进制的hashcode)
  • toString方法都遵循这样的格式:类的名字,随后是一对方括号(或者花括号)括起来的域值,下面是创建了一个Student类,然后使用IDEA默认生成的toString()方法
  • toString方法建议重写

    1. public String toString() {
    2. return getClass().getName() + "@" + Integer.toHexString(hashCode());
    3. }

    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案例:

  1. public class TeacherMain {
  2. public static void main(String[] args) {
  3. Teacher teacher01 = new Teacher("01","韦老师");
  4. Teacher teacher02 = new Teacher("01","韦老师");
  5. //会输出true,如果teacher没有重写equals,则会返回false
  6. System.out.println(teacher01.equals(teacher02));
  7. }
  8. }
  9. public class Teacher {
  10. private String teacherId;
  11. private String teacherName;
  12. public Teacher(String teacherId, String teacherName){
  13. this.teacherId = teacherId;
  14. this.teacherName = teacherName;
  15. }
  16. @Override
  17. public boolean equals(Object o) {
  18. if (this == o) { return true; }
  19. if (o == null || getClass() != o.getClass()) { return false; }
  20. Teacher teacher = (Teacher) o;
  21. return Objects.equals(teacherId, teacher.teacherId) &&
  22. Objects.equals(teacherName, teacher.teacherName);
  23. }
  24. @Override
  25. public int hashCode() {
  26. return Objects.hash(teacherId, teacherName);
  27. }
  28. }

hashCode方法

  • hashCode方法可以获得一个对象的内存地址值
  • 返回该对象的哈希码值。默认情况下,该方法会根据对象的地址来计算。
  • 不同的对象哈希码值一般都不会相同,同一个对象的哈希值一定相同
  • new一个对象反复输出可以看出它的hashCode值是不变的

getClass方法
返回这个运行时所产生的这个对象