java clone方法的默认实现是什么

avatar
作者
猴君
阅读量:0

在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字段也会受到影响。

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!