编程语言
首页 > 编程语言> > 10_Java基类Object

10_Java基类Object

作者:互联网

java.lang.Object 是 Java 类结构中其他所有类的超类。

clone

protected native Object clone() throws CloneNotSupportedException;

clone 方法返回当前对象的副本对象。

Object 将 clone 作为一个本地方法来实现。当执行 clone 的时候,会检查调用对象的类(或者父类)是否实现了java.lang.Cloneable接口( Object 类不实现 Cloneable )。如果没有实现这个接口,将会抛出一个检查异常 — java.lang.CloneNotSupportedException,如果实现了这个接口,会创建一个新的对象,并将原来对象的内容复制到新对象,最后返回这个新对象的引用。

浅克隆与深克隆

Object 类的 clone 方法是浅克隆,浅克隆对于字符串以外的引用数据类型克隆的是地址。深克隆则可以进行完全克隆。

public class Human implements Cloneable {

    public String name;

    public int age;

    public Human mother;

    @Override
    public Object clone() throws CloneNotSupportedException {
        return super.clone();
    }
}
public static void main(String[] args) throws CloneNotSupportedException {
  Human mother = new Human();
  mother.name = "gm";
  mother.age = 50;

  Human human = new Human();
  human.name = "kh";
  human.age = 25;
  human.mother = mother;

  Human copyMan = (Human) human.clone();

  System.out.println(human == copyMan); // false
  System.out.println(human.name == copyMan.name); // true
  System.out.println(human.mother == copyMan.mother); // true

}
public class Human implements Cloneable {

    public String name;

    public int age;

    public Human mother;

    @Override
    public Object clone() throws CloneNotSupportedException {
        Human human = (Human) super.clone();
        if(mother != null) {
            human.mother = (Human) mother.clone();
        }
        return human;
    }
}
public static void main(String[] args) throws CloneNotSupportedException {
  Human mother = new Human();
  mother.name = "gm";
  mother.age = 50;

  Human human = new Human();
  human.name = "kh";
  human.age = 25;
  human.mother = mother;

  Human copyMan = (Human) human.clone();

  System.out.println(human == copyMan); // false
  System.out.println(human.name == copyMan.name); // true
  System.out.println(human.mother == copyMan.mother); // false

}

toString

public String toString() {
        return this.getClass().getName() + "@" + Integer.toHexString(this.hashCode());
}

源码中 toString 方法返回的是 类名 + "@" + 当前对象的哈希值,以此表示当前对象,可根据需要重写。

equals 和 hashCode

public boolean equals(Object var1) {
  return this == var1;
}
public native int hashCode();

hashCode 相等,equals 可能不相等,但是,为 equals 不等对象生成不同的 hashCode 可能会提高哈希表的性能。

finalize

protected void finalize() throws Throwable {
}

当垃圾收集确定不再有对该对象的引用时,垃圾收集器在对象上调用。

getClass

public final native Class<?> getClass();

返回对象的运行时类。

标签:10,Java,human,clone,Object,Human,mother,public,name
来源: https://www.cnblogs.com/knhap/p/16275320.html