java里面的对象克隆:实际存在的对象拷贝几份!
即将一个实际的对象进行多份拷贝
package xsocket.server;
public class Test implements Cloneable {
private String name;
public void setName(String arg) {
this.name = arg;
}
public String getName() {
return this.name;
}
public Object clone() throws CloneNotSupportedException {
return super.clone();
}
public static void main(String[] args) throws CloneNotSupportedException {
Test shepp = new Test();
shepp.setName("first");
System.out.println(shepp.getName());
Test sheppclone = (Test)shepp.clone(); //对象拷出来一份副本
System.out.println(sheppclone.getName());
System.out.println("shepp == sheppclose" + (shepp == sheppclone));
}
}
要知道== 表示的是同一份对象。这里面的内存位置是不一样的哦。所以==就不一样了!
package xsocket.server;
public class Test implements Cloneable {
private String name;
public void setName(String arg) {
this.name = arg;
}
public String getName() {
return this.name;
}
public Object clone() throws CloneNotSupportedException {
return super.clone();
}
public static void main(String[] args) throws CloneNotSupportedException {
Test shepp = new Test();
shepp.setName("first");
Test shepp2 = shepp; //只是将两个值指向了同一个对象了所以会相互影响到对方的值!
System.out.println(shepp2.getName());
Test shepp3 = (Test)shepp.clone();//再做一个实际的副本出来就不会相互影响的!
shepp3.setName("another");
System.out.println(shepp3.getName());
System.out.println(shepp.getName());
}
}
输出:
first
another
first
(这就是拷贝的好处了!)
要考虑一下什么时候用浅clone什么时候用深clone
阅读(782) | 评论(0) | 转发(0) |