文章目录
在Java中,
Object
类是所有类的超类(或称为基类)。这意味着每个类都直接或间接地继承自
Object
类,并因此获得了
Object
类中定义的方法。以下是
Object
类中的一些常用方法,以及它们的含义和代码示例:
-
equals(Object obj)
- 含义:用于比较两个对象是否相等。默认情况下,此方法会比较对象的引用是否相等(即它们是否指向内存中的同一个对象)。但通常,子类会重写此方法以提供基于对象内容的比较。
- 示例:
public class Person { private String name; // 构造函数、getter和setter等 @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null || getClass() != obj.getClass()) return false; Person person = (Person) obj; return name != null ? name.equals(person.name) : person.name == null; } } // 使用示例 Person p1 = new Person("Alice"); Person p2 = new Person("Alice"); System.out.println(p1.equals(p2)); // 如果equals方法被正确重写,则输出true
-
hashCode()
- 含义:返回对象的哈希码值,该值通常用于在哈希表中存储对象。如果两个对象根据
equals(Object)
方法是相等的,那么它们的hashCode()
方法必须产生相同的整数结果。 - 示例:当重写
equals
方法时,通常也需要重写hashCode
方法以保持一致性。 - 下滑查看解决方法
- 含义:返回对象的哈希码值,该值通常用于在哈希表中存储对象。如果两个对象根据
-
toString()
- 含义:返回对象的字符串表示形式。默认情况下,此方法返回类名和对象的哈希码的无符号十六进制表示形式。子类通常会重写此方法以返回更有意义的字符串表示形式。
- 示例:
public class Person { private String name; // 构造函数、getter和setter等 @Override public String toString() { return "Person{" + "name='" + name + '\'' + '}'; } } // 使用示例 Person p = new Person("Alice"); System.out.println(p); // 输出: Person{name='Alice'}
-
clone()
- 含义:创建并返回此对象的一个副本。默认情况下,此方法是保护的,意味着它只能在同一包内的类或子类中访问。要使其对外部可用,子类必须覆盖此方法并声明为
public
。另外,由于对象的默认克隆机制是浅拷贝(shallow copy),因此如果对象包含对其他对象的引用,则这些引用将被复制到新对象中,而不是引用的对象本身。 - 示例:通常,只有实现了
Cloneable
接口的类才能被克隆。
- 含义:创建并返回此对象的一个副本。默认情况下,此方法是保护的,意味着它只能在同一包内的类或子类中访问。要使其对外部可用,子类必须覆盖此方法并声明为
-
finalize()
- 含义:当垃圾回收器确定不存在对该对象的更多引用时,在对象被垃圾回收之前调用此方法。但是,在现代Java中,
finalize
方法已经被弃用,因为垃圾回收器的行为是不确定的,并且很难预测何时会调用finalize
方法。 - 示例:由于
finalize
方法已被弃用,并且不建议使用,因此这里不提供示例代码。
- 含义:当垃圾回收器确定不存在对该对象的更多引用时,在对象被垃圾回收之前调用此方法。但是,在现代Java中,
-
getClass()
- 含义:返回一个
Class
对象,该对象表示此Object
的运行时类。 - 示例:
Object obj = new String("Hello"); Class<?> objClass = obj.getClass(); System.out.println(objClass.getName()); // 输出: java.lang.String
- 含义:返回一个
-
notify()
- 含义:唤醒在此对象监视器上等待的单个线程(如果存在)。
- 示例:通常与
wait()
和synchronized
关键字一起使用来实现线程间的通信。
-
notifyAll()
- 含义:唤醒在此对象监视器上等待的所有线程。
- 示例:同样,通常与
wait()
和synchronized
关键字一起使用来实现线程间的通信。
-
wait()
- 含义:导致当前线程等待,直到其他线程调用此对象的
notify()
方法或notifyAll()
方法;或者直到某个其他线程中断当前线程;或者已发生某种“特殊操作”(通常是由于某种I/O操作或notify()
/notifyAll()
的调用)。 - 示例:也通常与
synchronized
一起使用,用于线程间的通信和同步。
- 含义:导致当前线程等待,直到其他线程调用此对象的