类 Object 是类层次结构的根类。每个类都使用 Object 作为超类。所有对象(包括数组)都实现这个类的方法。
在API文件上Object类有9个方法:
经常会用到的方法
equals
equals用于指示其他某个对象是否与此对象“相等”。
在Object类中equals的方法体是
public boolean equals(Object obj) {
return (this == obj);
}
我们知道“==”在用于两个对象比较的时候比较的是两个对象的内存地址,所以在Object类下equals方法比较的是内存地址。
在String类中的equals的方法体是
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;
}
研究String类中的equals方法体可以看到
第一步:使用“==”比较两个对象的地址,地址若是一样,那么两个对象的值也肯定相等,直接返回true,否则进入下一步;
第二步:使用instanceof方法查看传入对象anObject是否是String类的对象,结果为真就进入下一步的比较,否则直接返回false;
第三步:在验证传入对象anObject为String类对象后,将anObject强制转换为String类型(其实我总觉得这个有点画蛇添足,第二步已经验证过了为什么还要强制转换,可能有什么我没有考虑到的地方把,毕竟是Java官方代码)。比较当前对象与传入对象的长度,若两对象的长度不等,返回false,若长度相等则进入下一步比较;
第四步:将两个String类对象存入Char数组中,之后逐个比较两个数组中的值,最后验证两个字符串是否相等。
2.hashCode()
返回该对象的哈希码值 。默认情况下,该方法会根据对象的地址来计算。不同对象的hashCode()一般来说不会相同(也就是说二般情况下会相同,看了会资料有点蒙,先不管这个)。但是同一个对象的hashCode()值肯定相同。
System.out.println("该对象的哈希码值是:"+p1.hashCode());
该对象的哈希码值是:2018699554
3.toString()
返回该对象的字符串表示
System.out.println("toString方法输出对象的字符串表示:"+p1.toString());
toString方法输出对象的字符串表示:com.hwadee.day0115.practice@7852e922
toString方法输出的是包名.类名+@+地址值
可以看到两个方法都会输出一个地址值,两个值是可以相互转换的
System.out.println("将hashcode值转换为toString中的地址值: "+Integer.toHexString(p1.hashCode()));
将hashcode值转换为toString中的地址值: 7852e922
线程中用到的方法
- void notify()
唤醒在此对象监视器上等待的单个线程。 - void notifyAll()
唤醒在此对象监视器上等待的所有线程。 - void wait()
在其他线程调用此对象的 notify() 方法或 notifyAll() 方法前,导致当前线程等待。
其他不常用到的方法
- protected Object clone()
创建并返回此对象的一个副本。 - protected void finalize()
当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法。 - Class
System.out.println("getClass()输出"+p1.getClass());
System.out.println("p1.getClass().getName(): "+p1.getClass().getName());
getClass()输出: class com.hwadee.day0115.practice
p1.getClass().getName()输出: com.hwadee.day0115.practice