一、浅拷贝、深拷贝

浅拷贝会对对象中的成员变量进行拷贝:如果是基本类型,拷贝的就是基本类型的值;如果属性是内存地址(引用类型),拷贝的就是内存地址 ;

深拷贝,除了基本类型外,引用类型所引用的对象也会进行拷贝;(引用的对象只要求浅拷贝即可;若要深层拷贝,一般可利用序列化和反序列化来实现,也可手动实现各级引用对象的深层拷贝;)

二、实现:

浅拷贝:实现Cloneable接口,重写clone()方法,在clone()调用父类super.clone()即可;

深拷贝:1. 实现Cloneable接口,除了调用super.clone(),还要对引用类型手动调用其clone()方法并赋值;

2. 使用序列化来实现深拷贝,实现Serializable接口,没有必需重写的方法;

序列化可结合这两个方法使用:

//这两个方法,并不是Serializable接口中定义的方法,但如果在对象中出现了,则会自动调用

//当对象在序列化时,若实现了这个方法,则调用

private void writeObject(ObjectOutputStream steam) throwsIOException{

stream.defaultWriteObject();

stream.writeObject(自定义对象);

}//当对象在反序列化时,若实现了这个方法,则调用

private void readObject(ObjectInputStream steam) throwsIOException{

stream.defaultReadObject();

stream.readObject();

}

注:a. clone 和 序列化都不会调用对象的构造方法;

b. 序列化 不会对 static 和 transient修饰的变量序列化;

c. 序列化的对象中引用类型变量的对象 也要实现Serializable,不要在序列化时会抛出 NotSerializableException;

java深拷贝和浅拷贝_Java 深拷贝浅拷贝 与 序列化相关推荐

  1. java 深拷贝_java 深拷贝与浅拷贝机制详解

    java 深拷贝与浅拷贝机制详解 概要: 在Java中,拷贝分为深拷贝和浅拷贝两种.java在公共超类Object中实现了一种叫做clone的方法,这种方法clone出来的新对象为浅拷贝,而通过自己定 ...

  2. java数组深拷贝和浅拷贝_java List复制:浅拷贝与深拷贝

    Java的拷贝可以分为三种:浅拷贝(Shallow Copy).深拷贝(Deep Copy).延迟拷贝(Lazy Copy). 在java中除了基本数据类型之外(int,long,short等),还存 ...

  3. java 对象深拷贝_java深入理解浅拷贝和深拷贝

    简介 拷贝对象是java中经常会遇到的问题.java中存在两种类型,基础类型和引用类型. java的赋值都是传值的,对于基础类型来说,会拷贝具体的内容,但是对于引用对象来说,存储的这个值只是指向实际对 ...

  4. java中浅拷贝和深拷贝_java中的浅拷贝和深拷贝

    复制 将一个对象的引用复制给另一个对象,一共有三种方式.第一种方式是直接赋值,第二种方式是浅复制,第三种方式是深复制. 1.直接赋值 在Java中,A a1 = a2,这实际上复制的是引用,也就是说 ...

  5. java浅拷贝和深拷贝的区别_Java 浅拷贝与深拷贝的区别

    浅拷贝 什么是浅拷贝 被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用仍然指向原来的对象.即对象的浅拷贝会对"主"对象进行拷贝,但不会复制主对象里面的对象. ...

  6. Java的浅拷贝与深拷贝总结

    Java中的对象拷贝(Object Copy)指的是将一个对象的所有属性(成员变量)拷贝到另一个有着相同类类型的对象中去.举例说明:比如,对象A和对象B都属于类S,具有属性a和b.那么对对象A进行拷贝 ...

  7. java深入理解浅拷贝和深拷贝

    文章目录 简介 拷贝接口 使用clone导致的浅拷贝 使用clone的深拷贝 不要overridden clone 总结 简介 拷贝对象是java中经常会遇到的问题.java中存在两种类型,基础类型和 ...

  8. Java提高篇 —— Java浅拷贝和深拷贝

    一.前言 我们知道在Java中存在这个接口Cloneable,实现该接口的类都会具备被拷贝的能力,同时拷贝是在内存中进行,在性能方面比我们直接通过new生成对象来的快,特别是在大对象的生成上,使得性能 ...

  9. java list拷贝_深入了解浅拷贝与深拷贝

    在学习深拷贝和浅拷贝之前,咱们先来一个例子: import java.util.ArrayList;public class MyBaby implements Cloneable {/*** 私有变 ...

最新文章

  1. socket什么情况下可读
  2. 三种运动让身高增长4-10cm
  3. asp.net C# 将数据导出到Execl汇总
  4. 谷歌最新双塔DNN召回模型——应用于YouTube大规模视频推荐场景
  5. 为什么软件工程师找不到工作?我想分享四个“恐怖故事”
  6. 一会儿花雨停了的飞鸽传书
  7. ios 自定义圆环进度条
  8. 操作系统(12)-【Linux】索引式文件系统
  9. sniffer模拟arp***
  10. Python:创建GUI界面步骤
  11. wordpress 增加备案号
  12. 《机器学习》周志华note2
  13. 【旺铺2012分享】导航CSS代码使用修改技巧!
  14. js 删除QQ空间的说说
  15. Java实现短信验证
  16. mark:x264编译选项
  17. pmp错题集2(强化二)
  18. MineCraft - 创世神插件
  19. 程序设计入门——C语言 翁恺 第1周编程练习
  20. linux系统下如何修改开机图片,Ubuntu Kylin下修改登录背景,用户头像,开机动画及自动更换壁纸...

热门文章

  1. Gradle中的默认任务和任务依赖关系设置
  2. SAP Fiori Elements - how is read only field implemented in UI
  3. HANA live report - metadata retrieve - where I can find it in HANA studio
  4. SAP UI5 -all controls within the same view will share the same data Model
  5. 本文可能是国内第一篇介绍C/4HANA Foundation的中文博客
  6. 使用git命令行将某个指定文件回退到前几个版本
  7. Difference between RawValue and FormattedValue
  8. 使用代码获得table whered use list
  9. SET UPDATE TASK LOCAL and commit session issue
  10. SAP ABAP应用服务器返回给前端的304 not modified是怎么设置的