java 深拷贝与浅拷贝
2024-08-28 18:04:22
yls 2019年11月07日
- 拷贝分为引用拷贝和对象拷贝
- 深拷贝和浅拷贝都属于对象拷贝
浅拷贝:通过Object默认的clone方法实现
实现Cloneable接口
public class Sheep implements Cloneable
重写clone方法
//默认浅拷贝
@Override
protected Object clone() throws CloneNotSupportedException {
return super.clone();
}
深拷贝
方式一
实现Cloneable接口
public class Sheep implements Cloneable
重写并修改clone方法
//深拷贝,方法一
//使用clone方式,要实现Cloneable接口
public Object deepClone() throws CloneNotSupportedException{
Sheep sheep=(Sheep) super.clone();
sheep.setFather((Father) sheep.getFather().clone());
return sheep;
}
方式二:通过序列化的方式
实现
Serializable
接口//深拷贝,方法二
//通过序列化的方式,要实现Serializable接口
public Object deepClone2() throws Exception {
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(byteArrayOutputStream); oos.writeObject(this);
ObjectInputStream ois = new ObjectInputStream(new ByteArrayInputStream(byteArrayOutputStream.toByteArray()));
return ois.readObject();
}
最新文章
- uboot(二): Uboot-arm-start.s分析
- 在阿里云ECS上搭建LEMP环境
- angularjs中ng-change使用方法
- Windows2008 VPN登录
- 关于MVC EntityType has no key defined的问题
- Angular2快速起步——构建一个简单的应用
- TinyXML2的使用
- 浏览器兼容性--IE11以及Edge等下载文件的中文名出现乱码,前后端解决方案
- BZOJ 2463: [中山市选2009]谁能赢呢?(新生必做的水题)
- POJ-2485 Highways---最小生成树中最大边
- netty源码分析之揭开reactor线程的面纱(二)
- linux-Navicat 连接数据库 报错10060 &; Navicat连接报错1146
- 【转】LVDS基础、原理、图文讲解
- 为什么阿里巴巴禁止开发人员使用isSuccess作为变量名
- 关于Android开发中使用的XML
- iota 币产生私钥的方法
- firedac引擎DATASNAP多表查询和多表提交
- 496. Next Greater Element I + 503. Next Greater Element II + 556. Next Greater Element III
- Transferring Data Between ASP.NET Web Pages
- php中的引用