前言
有些時候,我們會需要將資料(物件) 覆製一份,
方便獨立操作 ~ 卻發現結果跟想像的不一樣。
讓我們從程式碼來做個說明~
Sample Code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
public class Person { Name name; Address address; Person(Person p) { this.name = p.name; this.address = p.address; } // 其它省略… } class Address { String road; String city; String zipcode; } class Name { String firstName; String lastName; } |
一個正常的物件 Person p = new Person();
Shadow Copy
1 2 |
Person mother = new Person(new Name(), new Address()); Person son = new Person(mother); //將上一個物件傳到目前物件的建構子 |
Deep Copy
1 2 3 4 5 6 7 8 |
public class Person { private Name name; private Address address; public Person(Person otherPerson) { this.name = new Name(otherPerson.name); //產生新物件 this.address = new Address(otherPerson.address); //產生新物件 } } |
1 2 3 |
//承接上面的程式碼 Person mother = new Person(new Name(), new Address()); //有mother自己的資料 Person son = new Person(mother); //將上一個物件的資料覆製一份,會另產生一份獨立的。 |
對了~
對參考點的概念(Reference) 還不是很清楚?!
對建構子的運用 還想更進一步嗎?! 可以參考我們提供的教育訓練。
參考資料:
https://dzone.com/articles/java-copy-shallow-vs-deep-in-which-you-will-swim
Facebook Comments