歡迎您光臨本站 註冊首頁

Java裡面的對象克隆

←手機掃碼閱讀     火星人 @ 2014-03-09 , reply:0

  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裡面的對象克隆已經有442次圍觀

http://coctec.com/docs/java/show-post-60766.html