今天来说一说 java.lang.Object类(所有类的父类),所有类都直接或者间接的继承自该类。
1.构造方法:
public Object() 无参的构造方法
2.成员方法:
1) public final native Class<?> getClass(); 返回此对象的运行时类,即字节码文件对象
2) public native int hashCode(); 返回该对象的哈希码值
3) public boolean equals(Object obj){ return (this == obj); }; 比较两个对象是否相同, 当子类重写:可比较属性值
4) protected native Object clone() throws CloneNotSupportedException;
5) public String toString() { return getClass().getName() + "@" + Integer.toHexString(hashCode()); }
返回对象的字符串表示形式即内存地址值。组成:包名...类名(即类的全路径名)@内存地址值的十六进制
6) public final native void notify(); 唤醒线程
7) public final native void notifyAll();
8) public final void wait() throws InterruptedException { wait(0); }
9) public final native void wait(long timeout) throws InterruptedException;
10) protected void finalize() throws Throwable { }
3.面试题:==和equals()的区别?
equals():
比较基本类型:基本类型比较的是值。
比较引用类型:默认比较的是引用类型的内存地址值是否相同,如果子类重写了该方法,那就得按照重写后的规则进行比较。
==:
比较基本类型:比较的是基本类型的值是否相同。
比较引用类型:比较的是引用类型的内存地址值是否相同。
String类源码中重写的equals方法如下:
public boolean equals (Object anObject){
if (this == anObject) {
return true;
}
if (anObject instanceof String) {
String anotherString = (String) anObject;
int n = this.value.length;
if (n == anotherString.value.length) {
char v1[] = value;
char v2[] = anotherString.value;
int i = 0;
while (n-- != 0) {
f(v1[i] != v2[i])
return false;
i++;
}
return true;
}
}
return false;
}