java中的浅复制与深复制
2007-08-16 23:54
176 查看
在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型的对象,可通过强制类型转换使得其转换为所需复制对象类型。使用该方法复制为深复制,对复制对象的修改不会对原始对象产生影响。
因为此种复制方式在内存中为新对象重新分配了一份与原始对象一般的空间,并将原始对象的一份拷贝存放其中,所以对复制对象的操作只是对其独自进行的操作,不影响到原始对象。
今天学习的一点小东西,呵呵...
记录一下。
实际浅复制即是对同一个对象的同一份引用,例如使用:
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型的对象,可通过强制类型转换使得其转换为所需复制对象类型。使用该方法复制为深复制,对复制对象的修改不会对原始对象产生影响。
因为此种复制方式在内存中为新对象重新分配了一份与原始对象一般的空间,并将原始对象的一份拷贝存放其中,所以对复制对象的操作只是对其独自进行的操作,不影响到原始对象。
今天学习的一点小东西,呵呵...
记录一下。
相关文章推荐
- Java数组复制的方法和System.arraycopy
- 【剑指offer-Java版】26复杂链表的复制
- java和Android文件下载断点续传和图片下载代码实现,可直接复制简单实现
- java种复制文件的N种方法
- Java I/O 字节流 文件复制
- java递归实现多级文件的复制
- 牛客网Java刷题知识点之字节缓冲区练习之从A处复制文本文件到B处(BufferedReader、BufferedWriter)、复制文本文件的原理图解
- 【Java IO】NIO复制文件
- Java中递归实现复制文件夹和文件
- java深浅拷贝(复制)
- java list倒序输出及复制list集合
- Java中Clone方法的浅复制和深复制
- java 复制文件夹中epub、html、txt文件 (按原来文件夹存放)
- java:数组集合-复制
- Java基础之访问文件与目录——移动或复制文件和目录(MoveAndCopyFiles)
- java学习---------IO流学习---文件流inputstream outputstream(三)实现文件和文件夹的复制 删除
- java中file的一些用法:文件复制,lis方法和listfiles方法等
- java实现在复制文件时使用进度条(java实现进度条)
- Java对象深复制、浅复制
- 87、java的IO操作-复制文本