您好,登錄后才能下訂單哦!
這篇文章主要介紹“java淺拷貝如何使用”,在日常操作中,相信很多人在java淺拷貝如何使用問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”java淺拷貝如何使用”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
1.概念
淺拷貝會創建一個新對象,新對象和原對象本身沒有任何關系,新對象和原對象不等,但是新對象的屬性和老對象相同。具體可以看如下區別:
(1)如果屬性是基本類型(int,double,long,boolean等),拷貝的就是基本類型的值;
(2)如果屬性是引用類型,拷貝的就是內存地址(即復制引用但不復制引用的對象) ,因此如果其中一個對象改變了這個地址,就會影響到另一個對象。
2.原理
如果原型對象的成員變量是值類型,將復制一份給克隆對象,也就是說在堆中擁有獨立的空間;如果原型對象的成員變量是引用類型,則將引用對象的地址復制一份給克隆對象,也就是說原型對象和克隆對象的成員變量指向相同的內存地址。換句話說,在淺克隆中,當對象被復制時只復制它本身和其中包含的值類型的成員變量,而引用類型的成員對象并沒有復制。
3.使用實例
需要拷貝的類上實現Cloneable接口并重寫其clone()方法
class Father{ String name; public Father(String name) { this.name=name; } @Override public String toString() { return "Father{" + "name='" + name + '\'' + '}'; } } class Son implements Cloneable { int age; String name; Father father; public Son(String name,int age) { this.age=age; this.name = name; } public Son(String name,int age, Father father) { this.age=age; this.name = name; this.father = father; } @Override public String toString() { return "Son{" + "age=" + age + ", name='" + name + '\'' + ", father=" + father + '}'; } @Override protected Son clone() throws CloneNotSupportedException { return (Son) super.clone(); } } public class test { public static void main(String[] args) throws CloneNotSupportedException { Father f=new Father("bigFather"); Son s1 = new Son("son1",13); s1.father=f; Son s2 = s1.clone(); System.out.println(s1); System.out.println(s2); System.out.println("s1==s2:"+(s1 == s2));//不相等 System.out.println("s1.name==s2.name:"+(s1.name == s2.name));//相等 System.out.println(); //但是他們的Father father 和String name的引用一樣 s1.age=12; s1.father.name="smallFather";//s1.father引用未變 s1.name="son222";//類似 s1.name=new String("son222") 引用發生變化 System.out.println("s1.Father==s2.Father:"+(s1.father == s2.father));//相等 System.out.println("s1.name==s2.name:"+(s1.name == s2.name));//不相等 System.out.println(s1); System.out.println(s2); } }
到此,關于“java淺拷貝如何使用”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。