📅  最后修改于: 2023-12-03 15:16:32.501000             🧑  作者: Mango
在Java中,每个对象都是Object类的实例。Object类是Java中最基本的类之一,它位于Java类层次结构的顶端,所有的类都直接或间接地继承自Object类。
Object类提供了一些常用的方法,这些方法可以被所有子类使用:
equals()方法用于比较两个对象是否相等。默认情况下,它比较的是两个对象的内存地址,即它们是否指向同一个对象。但是,可以通过重写equals()方法来自定义对象的相等比较。例如:
public class Person {
private String name;
private int age;
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Person person = (Person) o;
return age == person.age &&
Objects.equals(name, person.name);
}
}
hashCode()方法返回对象的哈希码,用于支持基于哈希表的集合(如HashMap、HashSet等)。默认情况下,它返回对象的内存地址的哈希码。但是,如果重写了equals()方法,则通常也需要重写hashCode()方法,以确保对象的相等比较和哈希码一致。例如:
public class Person {
private String name;
private int age;
@Override
public int hashCode() {
return Objects.hash(name, age);
}
}
toString()方法返回对象的字符串表示。默认情况下,它返回由类名和对象的内存地址组成的字符串。但是,可以通过重写toString()方法来自定义对象的字符串表示。例如:
public class Person {
private String name;
private int age;
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
getClass()方法返回对象所属的类的Class对象。例如:
Person person = new Person();
Class<? extends Person> clazz = person.getClass();
除了上面提到的常用方法之外,Object类还提供了其他一些方法:
finalize()方法是Java垃圾回收机制的一部分,用于在对象被回收之前执行一些清理操作。但是,它已经被标记为过时的,不建议使用。
wait()方法用于使当前线程等待,直到另一个线程调用notify()或notifyAll()方法唤醒它。这些方法通常用于实现线程之间的协作。
clone()方法用于创建对象的副本。但是,它并不是一个很好的方法,因为它只是浅复制对象,而不是深复制对象。因此,通常建议使用其他方式(如序列化和反序列化)来创建对象的副本。
Object类是Java中最基本的类之一,它提供了一些常用的方法,包括equals()、hashCode()、toString()和getClass()等。这些方法可以被所有子类使用。除此之外,Object类还提供了其他一些方法,如finalize()、wait()、notify()、notifyAll()和clone()等。在实际开发中,我们通常会继承Object类,并重写其中的部分方法,以满足自己的需求。