Java_深拷贝和浅拷贝

浅拷贝

对基本数据类型进行了拷贝

对引用数据类型只是进行了引用的传递,而没有真实的创建一个新的对象。

对基本数据类型进行值传递,对引用数据类型进行引用传递般的拷贝
底层实现:

(1)对类实现Cloneable接口(implements Cloneable),并且重写clone

1
2
3
4
5
6
7
8
9
10
11
12
13
14
> public class A implements Cloneable{
> String name;
> String int age;
> Child child; //这是一个类,表A中的引用类型
> @Override
> public Object clone(){
> try{
> return super.clone();
> }catch(Exception e){
> }
> return null;
> }
> }
>

(2)用clone()方法创建新的对象

1
2
3
>     A a = new A();
> A aclone = (A)a.clone();
>

深拷贝

对基本数据类型进行了拷贝

对引用数据类型进行拷贝的时候,创建了一个新的对象,并且复制其内的成员变量

对基本数据类型进行值传递,对引用数据类型,创建一个新的对象,并复制其内容
底层实现:
  1. 序列化(serialization)这个对象,再反序列化回来,就可以得到这个新的对象,无非就是序列化的规则需要我们自己来写。
  2. 继续利用 clone() 方法,既然 clone() 方法,是我们来重写的,实际上我们可以对其内的引用类型的变量,再进行一次 clone()。对A而言就是深拷贝。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    >    public class A implements Cloneable{
    > String name;
    > String int age;
    > Child child; //这是一个类,表A中的引用类型
    > @Override
    > public Object clone(){
    > try{
    > return super.clone();
    > }catch(Exception e){
    > }
    > return null;
    > }
    > }
    > public class child implements Cloneable{
    > @Override
    > public Object clone(){
    > try{
    > return super.clone();
    > }catch(Exception e){
    > }
    > return null;
    > }
    > }
    >
总结
一个对象内部只有基本数据类型,那用 clone() 方法获取到的就是这个对象的深拷贝,而如果其内部还有引用数据类型,那用 clone() 方法就是一次浅拷贝的操作。
文章目录
  1. 1. 浅拷贝
    1. 1.0.0.1.
    2. 1.0.0.2. 底层实现:
  • 2. 深拷贝
    1. 2.0.0.1.
    2. 2.0.0.2. 底层实现:
  • 2.0.1. 总结
  • | 139.6k