1.浅复制与深复制概念
⑴浅复制(浅克隆)
被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用仍然指向原来的对象。换言之,浅复制仅仅复制所考虑的对象,而不
复制它所引用的对象。
⑵深复制(深克隆)
被复制对象的所有变量都含有与原来的对象相同的值,除去那些引用其他对象的变量。那些引用其他对象的变量将指向被复制过的新对象,而不再是原
有的那些被引用的对象。换言之,深复制把要复制的对象所引用的对象都复制了一遍。
import java.util.ArrayList;
public class TestClone implements Cloneable {
String a;
public TestClone(String a) {
super();
this.a = a;
}
public Object clone() throws CloneNotSupportedException {
return super.clone();
}
public static void main(String[] args) throws CloneNotSupportedException {
TestClone a = new TestClone("a");
TestClone b = a;
TestClone c = (TestClone) a.clone();
b.setA("b");
System.out.println(a + " " + b + " " + c);
ArrayList<String> d=new ArrayList<String>();
ArrayList<String> e=d;
ArrayList<String> f=(ArrayList<String>) d.clone();
e.add("e");
System.out.println(d);
System.out.println(e);
System.out.println(f);
}
public String getA() {
return a;
}
public void setA(String a) {
this.a = a;
}
@Override
public String toString() {
return "TestClone [a=" + a + "]";
}
}
结果:
TestClone [a=b] TestClone [a=b] TestClone [a=a]
[e]
[e]
[]
证明等号就是完全一样,一个带动,一起变。clone就是复制多一份出来。