Object类概述
概述
Object类是所有类的父类,任何一个类的对象(包括数组),都可以调用Object类的方法
目标:
掌握Object类的常用方法
常用方法:
boolean equals(Object obj):判断当前对象是否与参数对象"相等"
String toString():返回该对象的字符串表示形式
int hashCode():返回对象在堆内存的十进制地址值
需求:创建两个Student对象,利用Object提供的equals方法比较两个对象是否"相等"
//学生类
public class Student {
private String name;
private int age;
public Student() {
System.out.println("空参构造");
}
public Student(String name, int age) {
System.out.println("有参构造");
this.name = name;
this.age = age;
}
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;
}
Student stu1 = new Student("张三", 23);
Student stu2 = new Student("张三", 23);
//Student虽然没有声明父类,但是它的父类就是Object,可以使用equals方法
boolean result = stu1.equals(stu2);
通过底层代码分析,Object的equals方法衡量两个对象是否相等的条件,是比较对象地址值!
System.out.println(result);
//打印stu1对象
System.out.println(stu1);
//需求:尝试打印stu1不看到对象地址值,看到对象属性值!
//打印语句的底层,获取的打印内容是通过调用对象的toString方法得到的,此时Student自己没有,是调用的Object的toString方法
//场景:当父类方法不满足子类需求,重写父类Object的toString方法
比较stu1和stu2对象是否相等,但是衡量的条件得根据属性值来比较!
场景:当父类方法不能满足子类要求时,子类可以重写父类的方法
思路:让Student类重写Object父类的equals方法,在重写方法中根据对象属性值比较即可
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Student student = (Student) o;
if (age != student.age) return false;
return name != null ? name.equals(student.name) : student.name == null;
}
小结
-
Object的equals方法的作用是什么?
默认是比较两个对象的地址值,和“==”没区别
如果子类重写equals,则比较对象的属性值 -
Object的toString方法的作用是什么?
默认是返回对象的地址字符串
一般需要子类重写,去返回对象的属性值 -
字符串Object的hashCode方法的作用是什么?
返回对象的十进制地址值