java中的浅复制与深复制

来源:互联网 发布:mac极品飞车 编辑:程序博客网 时间:2024/05/16 07:33

在java中存在浅复制与深复制这样的两个概念!

实际浅复制即是对同一个对象的同一份引用,例如使用:

 int [ ] a = new int [ ]{1,12,45} ;

 int [ ] b = a;

 即a与b指向同一个对象,对b进行操作将引起a对象的改变!该方式为浅复制,对于基本数据类型该方式是可以行通的,如:

int a = 12;

int b = a;

b = 14;

对b的赋值操作不影响a的值。

而对于引用类型该复制方式不可以,需要重写clone()方法,对于String类型也一样,然而String类型不需显式地重写clone()方法。

对于其他方法均需重写clone()方法,在clone()方法中,调用super.clone();该方法在程序编译时自动识别你需要复制的类型,然后分配该类型的内存空间,然后复制一份为object型的对象,可通过强制类型转换使得其转换为所需复制对象类型。使用该方法复制为深复制,对复制对象的修改不会对原始对象产生影响。

因为此种复制方式在内存中为新对象重新分配了一份与原始对象一般的空间,并将原始对象的一份拷贝存放其中,所以对复制对象的操作只是对其独自进行的操作,不影响到原始对象。

今天学习的一点小东西,呵呵...

记录一下。