java 克隆

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 克隆相关的知识,希望对你有一定的参考价值。

1. About

     Java中, 对于基本数据类型可以使用"=" 来克隆,此时两个对象除了相等是没有任何关系的;

 而对于引用类型, 却不能简单地使用"="来克隆,这与java内存空间使用有关。

 java将内存空间分为两块, 即堆和栈。

  在栈中保存基本类型和引用变量,在堆中保存对象。

 对于引用变量而言,使用"="将修改引用, 而不是赋值堆中的对象,此时两个引用变量将指向同一个对象。

因此,修改一个引用变量将改变另一个引用变量。

 

2. 浅克隆

    如果对象的成员变量都是基本类型, 可以实现浅克隆完成。

    对象实现Cloneable接口, 并复写clone()方法

public class A implements Cloneable{
  //.............
   public A clone(){
       A a = null;
       try{
          a = (A)super.clone();
       }catch(CloneNotSupportedException e {
              //...... 
       }
       return a;

   }

}

3. 深克隆

如果对象中包含引用类型变量,需要深克隆

即对象本身实现Cloneable,复写clone()方法;同时可变成员变量也实现Cloneable, 并复写clone()

 public class A implements Cloneable{
   private C c;
   //get set
  //.............
   public A clone(){
       A a = null;
       try{
          a = (A)super.clone();
          a.c = c.clone();
       }catch(CloneNotSupportedException e {
              //...... 
       }
       return a;

   }

}

public class C implements Cloneable{
  //.............
   public C clone(){
       C c = null;
       try{
          c = (C)super.clone();
       }catch(CloneNotSupportedException e {
              //...... 
       }
       return c;

   }

}

 

以上是关于java 克隆的主要内容,如果未能解决你的问题,请参考以下文章

Forge Viewer - 如何在场景中访问(或获取渲染/片段代理)克隆的网格?

Instagram 克隆。单击按钮时,为啥我不能回到上一个片段?

如何在多个页面使用同一个HTML片段

第35题JAVA高级技术-对象克隆4(序列化与对象克隆)

Java 复制克隆(clone)InputStream的方法及示例代码

关于Java clone(浅克隆) 的代码