Java對象的淺複製

來源:互聯網
上載者:User

標籤: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對象的淺複製

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.