woaidongmao

文章均收录自他人博客,但不喜标题前加-[转贴],因其丑陋,见谅!~
随笔 - 1469, 文章 - 0, 评论 - 661, 引用 - 0
数据加载中……

Java对象的浅拷贝和深拷贝

首先介绍变量拷贝,变量拷贝时,原始变量和拷贝的新变量引用同一个对象。
例如:

Java代码 clip_image001

  1. Employee e1 = new Employee();  
  2. Employee e2 = e1;  //----引用,没有复制

Employee e1 = new Employee();

Employee e2 = e1;



如果要创建一个对象的新拷贝,其状态和原对象一样,但是以后各自状态各自维护,就要使用到clone方法了,当然你也可以通过其他方法实现。

clone
Object类的一个protected方法,也就意味的你不能乱拷贝的,其次如果对象中的所有属性都属于数值或者基本类型,这样拷贝没有问题的,但是,如果对象中包含子对象的引用,那么拷贝的结果就是两个对象引用同一个子对象。

1
、浅拷贝
默认的拷贝都是浅拷贝,你可以通过下面的方法实现:

Java代码 clip_image001

  1. class Employee implements Cloneable  
  2. {  
  3.    public Employee clone() throws CloneNotSupportedException  
  4.     {  
  5.      return super.clone();  
  6.     }  

class Employee implements Cloneable

{

   public Employee clone() throws CloneNotSupportedException

    {

     return super.clone();

    }

}


浅拷贝需要记住的是原对象的各属性最好都是基本类型或者不可变的对象。

2
、深拷贝
深拷贝是相对浅拷贝的,解决不能管理子对象的问题的。
实现方法如下:

Java代码 clip_image001

  1. class Employee implements Cloneable  
  2. {  
  3.    public Object clone() throws CloneNotSupportedException  
  4.     {  
  5.      Employee cloned = (Employee)super.clone();  
  6.  
  7.      //深拷贝子对象  
  8.      cloned.dep = (Department)dep.clone();  
  9.      return cloned.  
  10.     }  

class Employee implements Cloneable

{

   public Object clone() throws CloneNotSupportedException

    {

     Employee cloned = (Employee)super.clone();

 

     //深拷贝子对象

     cloned.dep = (Department)dep.clone();

     return cloned.

    }

}

 

posted on 2009-07-24 12:45 肥仔 阅读(340) 评论(0)  编辑 收藏 引用 所属分类: Web-后台


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理