標籤:java對象的淺複製
/** * Java對象的淺複製 * 在複製對象時,如果對象的成員變數是基本類型,則使用淺複製即可完成。 * 如果對象的成員變數包括可變參考型別,則需要深複製 * 如果參考型別是不可變的,如String類,則不必進行深複製 * 當需要複製對象時,需要使用clone()方法,該方法將類中的各個域進行複製, * 如果對於參考型別的域,這種操作就會有問題,因此成為淺複製。 * 提供複製功能的類需要實現Cloneable介面,否則會拋出異常 */public class Address{private String state;private String province;private String city;public Address(String state, String province, String city) {this.state = state;this.province = province;this.city = city;}public String getState() {return state;}public void setState(String state) {this.state = state;}public String getProvince() {return province;}public void setProvince(String province) {this.province = province;}public String getCity() {return city;}public void setCity(String city) {this.city = city;}@Overridepublic String toString() {return "Address [state=" + state + ", province=" + province + ", city="+ city + "]";}
public class Employee implements Cloneable {private String name;private int age;//新增Address對象private Address address;public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public Employee(String name, int age) {this.name = name;this.age = age;}public Employee(String name, int age, Address address) {this.name = name;this.age = age;this.address = address;}public Address getAddress() {return address;}public void setAddress(Address address) {this.address = address;}public Employee() {}@Overridepublic String toString() {return "Employee [name=" + name + ", age=" + age + ", address="+ address + "]";}//實現淺複製@Overrideprotected Employee clone() throws CloneNotSupportedException {Employee emp = null;try {emp = (Employee) super.clone();} catch (CloneNotSupportedException e) {e.printStackTrace();}return emp;}}
測試:
public class TestEmployeeAndAddress {public static void main(String[] args) throws CloneNotSupportedException {System.out.println("複製之前:");Address address = new Address("中國", "吉林", "長春");Employee emp1 = new Employee("張XX",30,address);System.out.println("員工1的資訊:"+emp1);System.out.println("複製之後:");Employee emp2 = emp1.clone();emp2.getAddress().setState("中國");emp2.getAddress().setProvince("四川");emp2.getAddress().setCity("成都");emp2.setName("李XX");emp2.setAge(24);System.out.println("員工1的資訊:"+emp1);System.out.println("員工2的資訊:"+emp2);}}
結果如下:
650) this.width=650;" src="https://s1.51cto.com/wyfs02/M01/8E/D7/wKioL1jMoyrjvs9ZAACRMGEbWPk435.jpg" title="36020170315204858576.jpg" alt="wKioL1jMoyrjvs9ZAACRMGEbWPk435.jpg" />
本文出自 “IT菜鳥” 部落格,請務必保留此出處http://mazongfei.blog.51cto.com/3174958/1907844
Java對象的淺複製