Object常用方法

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

浅复制 只是复制了引用 指向同一个对象

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
[email protected]@2f9ee1ac

你可能感兴趣的:(Object常用方法)