java裡面的對象克隆:實際存在的對象拷貝幾份!
即將一個實際的對象進行多份拷貝
Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
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));
}
}
要知道== 表示的是同一份對象.這裡面的內存位置是不一樣的哦.所以==就不一樣了!
Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
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
[火星人 ] Java裡面的對象克隆已經有443次圍觀