java 数组深度拷贝_Java中的深度拷贝和浅度拷贝
发布日期:2021-06-24 16:33:25 浏览次数:3 分类:技术文章

本文共 1749 字,大约阅读时间需要 5 分钟。

浅度拷贝:只复制一个对象,对象内部存在的指向其他对象数组或者引用则不复制。

深度拷贝:对象,对象内部的引用均复制。

具体我们通过例子分析一下:

class

Professor implements

Cloneable

//所有要进行克隆的对象所属的类必须实现java.lang.Cloneable接口

{

private

String pname;private int page;

public String getPname()

{return

pname;}

public void

setPname(String pname)

{this.pname

= pname;}

public int

getPage()

{return

page;}

public void

setPage(int page)

{this.page =

page;}

Professor(String

pname,int page)

{this.pname=pname;

this.page=page;

}

public

Object clone()

{Professor

p=null;

try

{p=(Professor)super.clone();

}

catch(Exception

e)

{e.printStackTrace();

}return p;}

public void

display()

{System.out.println("professor

Name:"+pname+";age:"+page);

}}

class

Student implements

Cloneable{

String

sname; int sage;

String

srollno; Professor

prof;

public

Student(String sname,int sage,Professor p)

{this.sname=sname;

this.sage=sage;

prof=p;

}

public Object

clone()

{Student

stud=null;

try{stud=(Student)super.clone();

//注意这里,我们做的只是浅复制,我们并没有对Student下的Professor做进一步复制。

其下的prof是一个引用,//这里我们仅仅拷贝了引用的地址,并没有对其中的属性进行拷贝。

}

catch(……)

{e.printStackTrace();

}return

stud;}

public void

display()

{System.out.println("student

Name is:"+sname+";Sage is:"+sage);

prof.display();}}

public class

Test {

public

static void main(String str[])

{Student

s=new Student("hope",22,new Professor("wei",43));

Student

s2=(Student)s.clone();

s.prof.setPage(111);

//这我们对prof引用进行了修改,由于该程序是浅复制

//,所以,我们修改s的同时,s2的改引用也发生了变化。

s.prof.setPname("11111");

s.display();

s2.display();

}}

其运行结果为:

student Name

is:hope;Sage is:22

professor Name:11111;age:111

student Name is:hope;Sage is:22

professor Name:11111;age:111

为了做到深层复制,我们修改代码如下:

public Object clone()

{Student stud=null;

try{stud=(Student)super.clone();

stud.prof=(Professor)prof.clone();//对其下层的引用也克隆一下。

}catch(……)

}return stud;}

转载地址:https://blog.csdn.net/weixin_33865450/article/details/114225292 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:java 二叉树线索化_java实现线索化二叉树的前序、中序、后续的遍历(完整代码)...
下一篇:java rich client_开发你的Rich Client:IBM对Laszlo开源富客户端平台提供支持

发表评论

最新留言

留言是一种美德,欢迎回访!
[***.207.175.100]2024年04月20日 09时12分05秒