源码:
/*
* Copyright (c) 1994, 2012, Oracle and/or its affiliates. All rights reserved.
* ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
*
*/
package java.lang;
/**
* Class {@code Object} is the root of the class hierarchy.
* Every class has {@code Object} as a superclass. All objects,
* including arrays, implement the methods of this class.
*
* @author unascribed
* @see java.lang.Class
* @since JDK1.0
*/
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 { }
}
始祖:
Object类是Java中所有类的最终祖先,在Java中,每个类都是由它扩展而来的,但是并不需要这样写 class Employee extends Object,因为如果在没有明确指出父类的时候,Object就被认为是这个类的最终父类。在Java中,只有基本类型
的值不是对象,而所有的数组类型等都扩展于Object类型。
hashcode():
- 每个对象都有自己hashCode,对象的存储地址值;
- String自己重写了hashCode()==>字符串内容
- 对象自己不重写hashCOde()方法就是取地址值
equals():
- 默认比较的是对象的hashCode--地址值(引用)
- String也重写了该方法
- 一般对象不重写该方法,很可能不能正确比较结果
- 比较时,当hashCode一致则会调用该方法具体比较(可自定义根据对象某些属性比较)