java对象拷贝之深拷贝与浅拷贝

互联网 19-11-25

1、要实现对象拷贝必须实现一个Cloneable接口,如果不实现这个接口就会产生一个CloneNotSupportedException异常。其实这个接口一个方法都没有,因此这类接口常被称作标记接口。

2、Object 中有一个clone() 方法实现了浅拷贝。对于基本数据类型的成员变量,浅拷贝会直接进行值传递,也就是将该属性值复制一份给新的对象,所以基本的数据类型直接进行浅拷贝即可。

对于可变的数据类型,比如Date对象就要实现深拷贝,当然Date类自己实现了clone()方法,而比如String类就没有实现clone()方法,因为String对象是不可变字符序列,在它的生命周期中没有任何方法能修改他所在内存中的字符序列,不同对象中的同类属性引用同一个String是没有问题的。

java学习视频教程:java学习视频

示例如下:

public class Main{ 	public static void main(String[] args){ 	} } class Employee implements Cloneable{ 	private int id; 	private Date date; 	public Employee(){} 	public Employee(int id){ 		this.id=id; 		this.date=new Date(); 	} 	@Override 	public Employee clone() throws CloneNotSupportedException{ 		Object t=super.clone();//此时的object中的拷贝只是浅拷贝 		Employee clone=(Employee)t; 		clone.date=this.data.clone();//date类实现了深拷贝,直接调用即可 		return clone; 	} } class Mannager extends Employee{ 	private String name; 	public Mannager(){ 		super(); 	} 	public Mannager(String name,int id){ 		super(id); 		this.name=name; 	} 	@Override 	public Mannager clone(){ 		Employee t=super.clone();//先把id date属性复制 		Mannager clone=(Mannager)t; 		clone.name=t.name;//String 对象直接赋值引用 		return clone; 	} }

更多java相关文章推荐:java入门教程

以上就是java对象拷贝之深拷贝与浅拷贝的详细内容,更多内容请关注技术你好其它相关文章!

来源链接:
免责声明:
1.资讯内容不构成投资建议,投资者应独立决策并自行承担风险
2.本文版权归属原作所有,仅代表作者本人观点,不代表本站的观点或立场
标签: 浅拷贝
上一篇:php获取远程图片并下载保存到本地的方法分析 下一篇:vue.js如何上传文件

相关资讯