Object类中的方法解释

Object类

方法如下图示:
image.png

  • getClass()
    该方法获得运行时该对象的类Class,我们可以进而使用该class获取该类的一些信息,如类名,类的构造方法,类的方法等。
    最直接的利用例子,反射,当我们已知某一个对象实例时,我们可以使用该方法进行一些反射的操作。

  • toString()
    该方法默认返回类名加内存地址,我们可以重写该方法,最常见的重写就是输出成员变量的名称和值。
    image.png

  • hashCode()
    该方法输出当前对象实例的hash值,hash值是一个整数,如下所示:
    image.png
    当然,我们可以重写该方法,自己设计hash值产生的规则,不过我们应该遵循一些规则,如:对于同一个对象,该方法生成的hash值应该一致,hash值具有传递性即a.hashCode()=b.hashCode(),b.hashCode()=c.hashCode(),那么a.hashCode()=c.hashCode()等等一些规则。

  • equals()
    比较方法,该对象用于比较两个对象的值是否一致。该方法同样可进行重写。
    注意其于==的区别:
    ==用于判断两对象内存地址是否一致,equals()是判断两对象内存地址中的值是否一致,即使两对象不属于同一个内存地址,但是值相等,则认为它们也相等,返回ture.
    实际上,equals在默认情况下与==是一样的,我们可以看到该方法默认下执行==判断
    image.png
    但是典型不同于等号的例子就是String字符串对象,该对象重写了equals()方法,如下代码块所示,当输入为对象时仍旧执行==,但是当为字符串对象时,则首先判断输入值和当前值长度是否一致,一致则将两值变为char数组,注意比较char字符,char实际是比较的ASCII码,即数字,则直接用等号比较。

public boolean equals(Object anObject) {
        if (this == anObject) {
            return true;
        }
        if (anObject instanceof String) {
            String anotherString = (String)anObject;
            int n = value.length;
            if (n == anotherString.value.length) {
                char v1[] = value;
                char v2[] = anotherString.value;
                int i = 0;
                while (n-- != 0) {
                    if (v1[i] != v2[i])
                        return false;
                    i++;
                }
                return true;
            }
        }
        return false;
    }
  • image.pngwait()
    该方法有三种
    image.png
    wait()方法主要作用是释放锁,使当前线程进入阻塞,其他线程可获得锁对象进而运行,同时其自身又积极的等待锁资源,当其他线程唤醒时,则又进入运行状态,不同于sleep()方法,sleep()不释放锁,其他线程无法获得。
    带有参数则在参数时间后还未被唤醒则自动醒来,若提前唤醒则该参数无效。
  • notify()
    与上述wait()方法对应,唤醒线程,但是只能唤醒wait线程中的一个。
  • notifyAll()
    与上述wait()和notify()方法对应,唤醒线程,唤醒所有。