public class Object {
public Object() {
}
private static native void registerNatives();
public final native Class<?> getClass();
//下面讲解一下 这两个
public native int hashCode();
//这里可以看到 是对地址进行的比较,但是String Integer Math等进行了重写 是比较的内容
public boolean equals(Object var1) {
return this == var1;
}
//是深复制
protected native Object clone() throws CloneNotSupportedException;
public String toString() {
return this.getClass().getName() + "@" + Integer.toHexString(this.hashCode());
}
public final native void notify();
public final native void notifyAll();
//被调用之后,线程会一直等待,知道本对象调用notify或者notifyAll
public final native void wait(long var1) throws InterruptedException;
//调用之后,当等待时间结束或者被唤醒时会结束等待
public final void wait(long var1, int var3) throws InterruptedException {
……
}
public final void wait() throws InterruptedException {
this.wait(0L);
}
protected void finalize() throws Throwable {
}
static {
registerNatives();
}
}
hashcode equals
hashCode() 的作用是获取哈希码,也称为散列码;它实际上是返回一个int整数。这个哈希码的作用是确定该对象在哈希表中的索引位置。
当equals()被override时,hashcode也要被override。
来看看官方的说明相等的对象,hashcode一定相等
-
两个对象的hashcode,他们不一定相同
- 想一下hashmap为什么会有链表,不就是因为这个吗
clone
- 想一下hashmap为什么会有链表,不就是因为这个吗
浅复制 只是复制了引用 指向同一个对象
Person p = new Person(23, "zhang");
Person p1 = p;
System.out.println(p);
System.out.println(p1);
result
*.Person@2f9ee1ac
*.Person@2f9ee1ac
深复制 复制了一个新的对象
Person p = new Person(23, "zhang");
Person p1 = (Person) p.clone();
Result
.Person@2f9ee1ac
.Person@.Person@2f9ee1ac