Java的浅拷贝和深拷贝(1)

来源:互联网 发布:拳击知乎 编辑:程序博客网 时间:2024/06/05 18:20

 Java的拷贝分为深拷贝和浅拷贝

 

浅拷贝:把一个对象中所有的非static成员变量(包括对其它对象的引用,java中的引用相当于C/C++中的指针变量)都拷贝一遍,而不拷贝引用所指向的对象

深拷贝:把一个对象中所有的非static成员变量(包括对其它对象的引用)都拷贝一遍,引用所指向的对象也拷贝一份

 

这篇文章先讲述浅拷贝,深拷贝下篇文章讲述

 

一个类的对象如果想要具有拷贝的功能,比如符号如下条件:

   1.必须实现Cloneable接口(这个接口中没有定义方法,叫做标记接口)

   2.重写Object类的clone()方法,该方法实现的是浅拷贝

   3.在该类的clone()方法中的第一句,比如调用super.clone()来调用Object的clone()方法来实现拷贝

 

以下是一个浅拷贝的例子:

 

 

 

 

从运行结果可以看出,通过学生s2将其引用school所指向的对象的name和bornYear属性改变,相应的s1的也被改变,这说明学生s1和学生s2里面的school引用指向的始终是同一个School对象。这就是浅拷贝的含义。