这段时间一直在看javabean的处理,可谓是博大精深,apache的beanutil由于用到的是反射机制,和cglib的beanutil速度差了好几百倍,这不是本节博客重点,在研究bean的拷贝的时候,顺便复习了一下java里的克隆技术,这里只做克隆部分记录
(下次分享一下另外一个高效率,高配置的beanutil工具来copyproperties,在googlecode上找到一个可以通过配置xml的元和目标的框架来进行copy属性的东东,希望通过努力我可以改成annotation版本)
浅克隆:
简单值类型的拷贝,引用类型只是用了同一份,并没有copy一份新的,所以更改时候会有影响。
深克隆:
把简单类型和复杂类型都拷贝一份,这样更改源或目标里的引用时不会印象另一端。
代码如下:
- import java.io.ByteArrayInputStream;
- import java.io.ByteArrayOutputStream;
- import java.io.IOException;
- import java.io.ObjectInputStream;
- import java.io.ObjectOutputStream;
- import java.io.Serializable;
- import java.util.Locale;
- public class DeepAndShallowClone {
- public static void main(String[] args) throws Exception{
- System.out.println("-------浅克隆克隆---------");
- // shallow clone
- ShallowClone sc = new ShallowClone();
- ShallowClone scCopy = (ShallowClone)sc.clone();
- System.out.println("Shallow Copy");
- System.out.println("--Before clone");
- System.out.println("sc.a=" + sc.a);
- System.out.println("sc.b=" + sc.b[0]);