Java Object类详解

发布时间:2024年01月14日

代码

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 {
    }
}

registerNatives()

  • 作用:这是用于注册本地方法的静态初始化方法。它确保与本地代码的连接被正确设置。

  • 原理:Java允许使用本地方法(通常是用C或C++写的)来调用操作系统的API或其他本地资源。registerNatives()方法就是为了这个目的而存在的。

getClass()

  • 作用:返回对象的运行时类。

  • 原理:每个Java对象都有一个与之关联的类。这个方法返回表示该类的Class对象。

hashCode()

  • 作用:返回对象的哈希码,通常用于散列数据结构如哈希表。

  • 原理:哈希码是一个整数,基于对象的内部地址或其他唯一标识。Java的哈希码实现可以由子类重写以提供更好的性能或更均匀的分布。

equals(Object obj)

  • 作用:比较当前对象与参数对象是否相等。

  • 原理:默认的实现比较两个引用是否指向同一个对象(即它们在内存中的地址是否相同)。

在Java中,equals()和==运算符在比较对象时具有不同的用途和行为。

==运算符:

==用于比较两个基本数据类型或两个对象的引用地址是否相等。
对于基本数据类型,==比较的是它们的值是否相等。
对于对象,==比较的是它们的引用地址是否相等,即它们是否指向内存中的同一个对象。
equals()方法:

equals()方法是Object类中的一个方法,用于比较两个对象的内容是否相等。
在默认情况下,equals()方法的行为与==运算符相同,即比较引用地址。
然而,许多类(如String、Integer等)重写了equals()方法,使其根据对象的实际内容进行比较。例如,String类的equals()方法比较的是字符串的内容是否相等,而不是引用地址。
因此,如果你想比较两个对象的内容是否相等,最好使用equals()方法。如果你想比较两个引用是否指向同一个对象,可以使用==运算符。

clone()

  • 作用:创建并返回此对象的一个副本。

  • 说明:通过调用clone()方法,可以复制一个对象。这个方法可以被覆盖以提供自定义的复制逻辑。

toString()

  • 作用:返回对象的字符串表示形式。

  • 说明:默认的实现返回类名和哈希码的十六进制表示,这有助于在调试时更好地识别对象。

notify() 和 notifyAll()

  • 作用:唤醒正在等待该对象的监视器(线程)。

  • 说明:当一个线程在某个对象上等待(通过wait()方法)时,它可以被其他线程通过调用该对象的notify()或notifyAll()方法唤醒。这通常用于实现多线程之间的同步。

wait(long timeout) 和 wait(long timeout, int nanos)

  • 作用:使当前线程等待,直到另一个线程调用该对象的notify()、notifyAll()或interrupt()方法,或者超过了指定的时间。

  • 说明:这些方法是线程同步的另一个工具,允许一个线程等待另一个线程完成某个操作。它们是实现线程间通信的重要手段。

finalize()

  • 作用:当垃圾收集器准备回收对象的内存时,由对象的finalize()方法(如果有)被调用。

  • 说明:这是一个特殊的方法,允许开发者在对象被垃圾收集前执行一些操作,如释放资源或打印日志。

文章来源:https://blog.csdn.net/qq_40673786/article/details/135588250
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。