Java中Cloneable接口的用法
2013-08-22 15:44
627 查看
Java中Cloneable接口的用法
今天编写一个用到Cloneable接口的程序时才注意到原来clone()方法提供的是浅层拷贝,而不是我先前认为的深层拷贝。class A implements Cloneable{
int a=1;
ArrayList b=new ArrayList();
public A getClone(){
return (A) this.clone();
}
}
对于这样的一个类,如果调用它的getClone()方法进行复制的话,成员变量a会被复制,但是成员变量b不会像预想的那样会复制一个ArrayList(),复制的对象与原先的对象中的b都会指向相同的一个ArrayList()。因此如果需要做深层拷贝需要添加额外的代码。
class A implements Cloneable{
int a=1;
ArrayList b=new ArrayList();
public A getClone(){
A temp=(A) this.clone();
temp.b=new ArrayList();
for(int i=0;i<b.size();i++){
temp.b.add(b.get(i));
}
return temp;
}
}
原始对象中的字符串和数组不受到克隆对象设置值的影响(会创建一个独立的),而类对象变量则会受到了克隆对象的影响。如list、map........ ;static修饰的也将是以引用的形式克隆
相关文章推荐
- Java中Cloneable接口的用法
- Java对象克隆(Clone)及Cloneable接口、Serializable接口的深入探讨
- java 的对象拷贝(有深浅拷贝两种方式,深拷贝实现的两种方式(逐层实现cloneable接口,序列化的方式来实现))
- Java中的深克隆和浅克隆——Cloneable接口
- Java中Serializable接口和Cloneable接口
- Java对象克隆(Clone)及Cloneable接口、Serializable接口的深入探讨
- Java Cloneable接口与Serializable接口实现对象克隆和深度克隆
- java cloneable接口及使用场景
- java对象 深度克隆(不实现Cloneable接口)和浅度克隆
- java.lang.Cloneable接口
- Java深拷贝除了通过实现Cloneable接口,另外还可以通过序列化实现对象的拷贝。
- Java 基础数据类型 和 深度克隆对象的2种方法(实现Cloneable接口或者实现对象序列化)
- java对象 深度克隆(不实现Cloneable接口)和浅度克隆
- Java对象克隆(Clone)及Cloneable接口、Serializable接口的深入探讨
- java 重写接口Cloneable的Clone方法 拷贝对象
- 五星-原型模式常使用于以下场景--而JAVA中的任何类只要实现了Cloneable标识接口,就可以使用clone方法来进行对象的拷贝
- java 浅层克隆和深层克隆(实现接口Cloneable)
- Java对象克隆(Clone)及Cloneable接口、Serializable接口的深入探讨
- Java对象克隆(Clone)及Cloneable接口、Serializable接口的深入探讨
- Java对象克隆(Clone)及Cloneable接口、Serializable接口的深入探讨