📅  最后修改于: 2023-12-03 14:42:21.105000             🧑  作者: Mango
Java语言中所有类都继承自java.lang.Object类,主要作用是提供一些通用的方法,因此可以看作是所有类的根类。底层库和框架的核心类库都是基于java.lang.Object开发的。下面介绍java.lang.Object的灵活性以及其在程序设计中的应用。
java.lang.Object提供了一些通用的方法,如下所示:
这些通用方法为所有Java类提供了很大的灵活性。开发者可以根据实际需求,覆盖这些方法,实现自己的逻辑。
通过覆盖java.lang.Object提供的方法,我们可以实现自己的逻辑,比如实现比较几个对象的大小、实现自定义的哈希码等。
equals()方法用于判断当前对象是否和指定对象相等。如果两个对象相等,它们的hashCode()方法应该返回相同的值。例如:
public class Student {
private int id;
private String name;
@Override
public boolean equals(Object obj) {
if (obj instanceof Student) {
Student other = (Student) obj;
return this.id == other.id && this.name.equals(other.name);
}
return false;
}
@Override
public int hashCode() {
return Objects.hash(id, name);
}
}
在实现equals()方法时,我们一般还需要实现hashCode()方法,确保将相等的对象映射到相同的哈希表桶中。
如果没有覆盖toString()方法,系统会返回当前对象的类名和哈希码的16进制字符串。例如:
public class Student {
private int id;
private String name;
}
Student student = new Student(1, "Bob");
System.out.println(student.toString()); // 输出:Student@15db9742
为了方便调试和日志输出,我们通常会实现toString()方法,将对象信息输出为字符串,例如:
public class Student {
private int id;
private String name;
@Override
public String toString() {
return "Student{" +
"id=" + id +
", name='" + name + '\'' +
'}';
}
}
Student student = new Student(1, "Bob");
System.out.println(student.toString()); // 输出:Student{id=1, name='Bob'}
compareTo()方法用于比较两个对象的大小,如果当前对象小于指定对象,返回负数;如果当前对象大于指定对象,返回正数;如果两个对象相等,返回0。只有实现了Comparable接口的类才能使用该方法。例如:
public class Student implements Comparable<Student> {
private int id;
private String name;
@Override
public int compareTo(Student o) {
if (this.id > o.id) {
return 1;
} else if (this.id < o.id) {
return -1;
} else {
return 0;
}
}
}
Student student1 = new Student(1, "Bob");
Student student2 = new Student(2, "Amy");
System.out.println(student1.compareTo(student2)); // 输出:-1
java.lang.Object的灵活性提供了很大的便利性,能够让开发者根据实际需求轻松实现自己的逻辑。通过重写equals()、hashCode()、toString()和compareTo()等方法,可以让Java程序更加灵活和强大。