当前位置: 移动技术网 > IT编程>开发语言>Java > 解析JAVA深度克隆与浅度克隆的区别详解

解析JAVA深度克隆与浅度克隆的区别详解

2019年07月22日  | 移动技术网IT编程  | 我要评论
在java克隆对象不能简单的使用clone方法,clone方法只是进行浅克隆。请看下方:
深度克隆类:
java代码
复制代码 代码如下:

import java.io.bytearrayinputstream;
import java.io.bytearrayoutputstream;
import java.io.ioexception;
import java.io.objectinputstream;
import java.io.objectoutputstream;
public class depthclone {
    public  final static object objectcopy(object oldobj) {
        object newobj = null;
        try {
            bytearrayoutputstream bo = new bytearrayoutputstream();
            objectoutputstream oo = new objectoutputstream(bo);
            oo.writeobject(oldobj);//源对象
            bytearrayinputstream bi = new bytearrayinputstream(bo.tobytearray());
            objectinputstream oi= new objectinputstream(bi);
            newobj = oi.readobject();//目标对象
        } catch (ioexception e) {
            e.printstacktrace();
        }catch (classnotfoundexception e) {
            e.printstacktrace();
        }
        return newobj;
    }
}

浅度克隆类:
java代码
复制代码 代码如下:

import java.io.serializable;
public class simpleclone implements cloneable ,serializable {
    private static final long serialversionuid = -7552721152118950502l;

    public    string s = null;
    public object o = null;
    public cloneobject cloneobject = null;

    
    public simpleclone(cloneobject cloneobject) {
        this.cloneobject = cloneobject;
    }
    public object clone() {
        simpleclone newsimpleclone =  null;
        try {
            /* 浅克隆 */
            newsimpleclone = (simpleclone)super.clone();
        } catch (clonenotsupportedexception e) {
            e.printstacktrace();
        }
        return newsimpleclone;
    }
}

克隆对象:
java代码
复制代码 代码如下:

import java.io.serializable;

public class cloneobject implements serializable{

    private static final long serialversionuid = 4332788486669750696l;

    private string name ;

    public string getname() {
        return name;
    }

    public void setname(string name) {
        this.name = name;
    }

}

克隆测试:
java代码
复制代码 代码如下:

public class testclone {

    public static void main(string[] arg) {
        cloneobject obj1 = new cloneobject();
        obj1.setname("cloneone");
        cloneobject obj2 = new cloneobject();
        obj2.setname("clonetwo");

        simpleclone simpleclone1 = new simpleclone(obj1);
        simpleclone simpleclone2 = new simpleclone(obj2);

        simpleclone1.s = "simpleclone1";
        simpleclone1.o = "simpleclone1object";

        //simpleclone2 = (simpleclone)simpleclone1.clone();

        simpleclone2 = (simpleclone)depthclone.objectcopy(simpleclone1);

        /* 如果是浅克隆, simpleclone1中的cloneobject会随着simpleclone2的cloneobject改变面改变*/
        simpleclone2.cloneobject.setname("clonethree");

        system.out.println(simpleclone1.cloneobject.getname());
        system.out.println(simpleclone2.cloneobject.getname());
    }

}

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网