溫馨提示×

java clone方法的默認實現是什么

小樊
124
2024-10-16 00:00:56
欄目: 編程語言

在Java中,clone()方法是Object類的一個protected方法,它的默認實現是淺拷貝(shallow copy)。這意味著它只復制對象本身和對象中的基本數據類型(如int、float等),而不會遞歸地復制對象內部的其他對象。如果對象內部還有引用類型字段,那么這些字段的值仍然是原來對象的引用,而不是新對象的引用。

對于實現Cloneable接口的類,可以通過重寫clone()方法來實現深拷貝(deep copy)。深拷貝會遞歸地復制對象內部的所有對象,新對象和原對象在內存中是完全獨立的。

以下是一個簡單的示例,說明clone()方法的默認實現:

class Person implements Cloneable {
    String name;
    int age;
    Address address;

    public Person(String name, int age, Address address) {
        this.name = name;
        this.age = age;
        this.address = address;
    }

    @Override
    protected Object clone() throws CloneNotSupportedException {
        return super.clone();
    }
}

class Address implements Cloneable {
    String street;
    String city;

    public Address(String street, String city) {
        this.street = street;
        this.city = city;
    }

    @Override
    protected Object clone() throws CloneNotSupportedException {
        return super.clone();
    }
}

public class Main {
    public static void main(String[] args) throws CloneNotSupportedException {
        Person person1 = new Person("Alice", 30, new Address("123 Main St", "New York"));
        Person person2 = (Person) person1.clone();

        System.out.println(person1.name); // Alice
        System.out.println(person2.name); // Alice

        person1.address.street = "456 Elm St";

        System.out.println(person1.address.street); // 456 Elm St
        System.out.println(person2.address.street); // 123 Main St
    }
}

在這個示例中,Person類和Address類都實現了Cloneable接口,并重寫了clone()方法。然而,由于clone()方法的默認實現是淺拷貝,所以person1person2address字段指向的是同一個Address對象。當我們修改person1address字段時,person2address字段也會受到影響。

0
亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女