public class Object {
private static native void registerNatives();
static {
registerNatives();
}
public final native Class<?> getClass();
public native int hashCode();
public boolean equals(Object obj) {
return (this == obj);
}
protected native Object clone() throws CloneNotSupportedException;
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
public final native void notify();
public final native void notifyAll();
public final native void wait(long timeout) throws InterruptedException;
public final void wait(long timeout, int nanos) throws InterruptedException {
if (timeout < 0) {
throw new IllegalArgumentException("timeout value is negative");
}
if (nanos < 0 || nanos > 999999) {
throw new IllegalArgumentException("nanosecond timeout value out of range");
}
if (nanos > 0) {
timeout++;
}
wait(timeout);
}
public final void wait() throws InterruptedException {
wait(0);
}
protected void finalize() throws Throwable {
}
}
作用:这是用于注册本地方法的静态初始化方法。它确保与本地代码的连接被正确设置。
原理:Java允许使用本地方法(通常是用C或C++写的)来调用操作系统的API或其他本地资源。registerNatives()方法就是为了这个目的而存在的。
作用:返回对象的运行时类。
原理:每个Java对象都有一个与之关联的类。这个方法返回表示该类的Class对象。
作用:返回对象的哈希码,通常用于散列数据结构如哈希表。
原理:哈希码是一个整数,基于对象的内部地址或其他唯一标识。Java的哈希码实现可以由子类重写以提供更好的性能或更均匀的分布。
作用:比较当前对象与参数对象是否相等。
原理:默认的实现比较两个引用是否指向同一个对象(即它们在内存中的地址是否相同)。
在Java中,equals()和==运算符在比较对象时具有不同的用途和行为。
==运算符:
==用于比较两个基本数据类型或两个对象的引用地址是否相等。
对于基本数据类型,==比较的是它们的值是否相等。
对于对象,==比较的是它们的引用地址是否相等,即它们是否指向内存中的同一个对象。
equals()方法:
equals()方法是Object类中的一个方法,用于比较两个对象的内容是否相等。
在默认情况下,equals()方法的行为与==运算符相同,即比较引用地址。
然而,许多类(如String、Integer等)重写了equals()方法,使其根据对象的实际内容进行比较。例如,String类的equals()方法比较的是字符串的内容是否相等,而不是引用地址。
因此,如果你想比较两个对象的内容是否相等,最好使用equals()方法。如果你想比较两个引用是否指向同一个对象,可以使用==运算符。
作用:创建并返回此对象的一个副本。
说明:通过调用clone()方法,可以复制一个对象。这个方法可以被覆盖以提供自定义的复制逻辑。
作用:返回对象的字符串表示形式。
说明:默认的实现返回类名和哈希码的十六进制表示,这有助于在调试时更好地识别对象。
作用:唤醒正在等待该对象的监视器(线程)。
说明:当一个线程在某个对象上等待(通过wait()方法)时,它可以被其他线程通过调用该对象的notify()或notifyAll()方法唤醒。这通常用于实现多线程之间的同步。
作用:使当前线程等待,直到另一个线程调用该对象的notify()、notifyAll()或interrupt()方法,或者超过了指定的时间。
说明:这些方法是线程同步的另一个工具,允许一个线程等待另一个线程完成某个操作。它们是实现线程间通信的重要手段。
作用:当垃圾收集器准备回收对象的内存时,由对象的finalize()方法(如果有)被调用。
说明:这是一个特殊的方法,允许开发者在对象被垃圾收集前执行一些操作,如释放资源或打印日志。