关于浅拷贝和深拷贝,简单来说就是创建一个和已知对象一模一样的对象。深入了解浅拷贝和深拷贝,对于Java中的值传递或者引用传递将会有更深的理解。

Java基本类型和引用方式

Java的数据类型分为两大类:基本数据类型和引用类型。 基本数据类型包括字符类型char,布尔类型boolean以及数值类型byte、short、int、long、float、double。 引用类型则包括类、接口、数组、枚举等,同时Java也为每种基本数据类型提供了封装类型,分别是Character,Boolean,Byte,Short,Integer,Long,Floag,Double。引用类型是一种对象类型,它的值指向内存空间的引用,就是地址。 基本数据类型的变量是存储在栈内存中,而引用类型变量是存储在栈内存中,保存的是实际对象在堆内存中的地址,实际对象的属性保存在堆内存中。

创建对象的方式

  1. 通过new 关键词:这是最常用的一种方式,通过new关键词调用类的有参或无参构造方法来创建对象,比如Object o = new Object();
  2. 调用Class类的newInstance方法:默认调用类的无参构造方法创建对象。比如Object object = Class.forName(“java.lang.Object”).newInstance();
  3. 通过Constructor类的newInstance方法:与2类似,都是通过反射来实现创建对象,比如Object object = Object.class.getConstructor().newInstance();
  4. 利用Clone方法:Clone是Object类中的一个方法,通过对象A.clone()方法会创建一个内容和对象A一模一样的对象B。比如Person clone = person.clone();
  5. 反序列化:序列化是把堆内存中的Java对象数据,通过某种方式把对象存储在磁盘文件中或者传递给其他网络结点(在网络上传输)。而反序列化则是把磁盘文件中的对象数据或者网络结点上的对象数据,恢复成Java对象模型的过程。

浅拷贝

简单来说就是利用Clone方法拷贝属性的值

深拷贝

深拷贝是相对于浅拷贝来说的,本质原理是每一个属性类中的属性都要被clone一次。实际生产过程一般通过序列化和反序列化完成