Object类中的方法解释
Object类
方法如下图示:
-
getClass()
该方法获得运行时该对象的类Class,我们可以进而使用该class获取该类的一些信息,如类名,类的构造方法,类的方法等。
最直接的利用例子,反射,当我们已知某一个对象实例时,我们可以使用该方法进行一些反射的操作。 -
toString()
该方法默认返回类名加内存地址,我们可以重写该方法,最常见的重写就是输出成员变量的名称和值。
-
hashCode()
该方法输出当前对象实例的hash值,hash值是一个整数,如下所示:
当然,我们可以重写该方法,自己设计hash值产生的规则,不过我们应该遵循一些规则,如:对于同一个对象,该方法生成的hash值应该一致,hash值具有传递性即a.hashCode()=b.hashCode(),b.hashCode()=c.hashCode(),那么a.hashCode()=c.hashCode()等等一些规则。 -
equals()
比较方法,该对象用于比较两个对象的值是否一致。该方法同样可进行重写。
注意其于==的区别:
==用于判断两对象内存地址是否一致,equals()是判断两对象内存地址中的值是否一致,即使两对象不属于同一个内存地址,但是值相等,则认为它们也相等,返回ture.
实际上,equals在默认情况下与==是一样的,我们可以看到该方法默认下执行==判断
但是典型不同于等号的例子就是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;
}
wait()
该方法有三种
wait()方法主要作用是释放锁,使当前线程进入阻塞,其他线程可获得锁对象进而运行,同时其自身又积极的等待锁资源,当其他线程唤醒时,则又进入运行状态,不同于sleep()方法,sleep()不释放锁,其他线程无法获得。
带有参数则在参数时间后还未被唤醒则自动醒来,若提前唤醒则该参数无效。- notify()
与上述wait()方法对应,唤醒线程,但是只能唤醒wait线程中的一个。 - notifyAll()
与上述wait()和notify()方法对应,唤醒线程,唤醒所有。