clone() 方法(浅拷贝或深拷贝)

clone() method (Shallow or Deep copying)

在 java 书籍和在线教程中指出 Object.clone() 方法提供浅拷贝,除非使用 Cloneable 接口但在代码中我实现了 clone() 方法而不使用 Cloneable 接口,它提供深拷贝而不是浅拷贝。

import java.util.GregorianCalendar;
public class test1 {

   public static void main(String[] args) {

      // create a gregorian calendar, which is an object
      GregorianCalendar cal = new GregorianCalendar();

      // clone object cal into object y
      GregorianCalendar y = (GregorianCalendar) cal.clone();

      // check if reference of y is equal to cal or not
      System.out.println(cal==y);//it's output should be true if this is a shallow copy but it is false.
   }
}

GregorianCalendar 确实实现了 Cloneable 接口,所以它应该进行深度复制。

编辑:Java 仅处理对对象的引用。因此,在这种情况下,由于 GregorianCalendarclone 方法执行深度复制,复制引用的一种方法是将 cal 分配给 y,即 y = cal.