這篇文章主要介紹“java淺拷貝如何使用”,在日常操作中,相信很多人在java淺拷貝如何使用問題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”java淺拷貝如何使用”的疑惑有所幫助!接下來,請(qǐng)跟著小編一起來學(xué)習(xí)吧!
成都創(chuàng)新互聯(lián)專注于成武網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗(yàn)。 熱誠(chéng)為您提供成武營(yíng)銷型網(wǎng)站建設(shè),成武網(wǎng)站制作、成武網(wǎng)頁設(shè)計(jì)、成武網(wǎng)站官網(wǎng)定制、重慶小程序開發(fā)服務(wù),打造成武網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供成武網(wǎng)站排名全網(wǎng)營(yíng)銷落地服務(wù)。
1.概念
淺拷貝會(huì)創(chuàng)建一個(gè)新對(duì)象,新對(duì)象和原對(duì)象本身沒有任何關(guān)系,新對(duì)象和原對(duì)象不等,但是新對(duì)象的屬性和老對(duì)象相同。具體可以看如下區(qū)別:
(1)如果屬性是基本類型(int,double,long,boolean等),拷貝的就是基本類型的值;
(2)如果屬性是引用類型,拷貝的就是內(nèi)存地址(即復(fù)制引用但不復(fù)制引用的對(duì)象) ,因此如果其中一個(gè)對(duì)象改變了這個(gè)地址,就會(huì)影響到另一個(gè)對(duì)象。
2.原理
如果原型對(duì)象的成員變量是值類型,將復(fù)制一份給克隆對(duì)象,也就是說在堆中擁有獨(dú)立的空間;如果原型對(duì)象的成員變量是引用類型,則將引用對(duì)象的地址復(fù)制一份給克隆對(duì)象,也就是說原型對(duì)象和克隆對(duì)象的成員變量指向相同的內(nèi)存地址。換句話說,在淺克隆中,當(dāng)對(duì)象被復(fù)制時(shí)只復(fù)制它本身和其中包含的值類型的成員變量,而引用類型的成員對(duì)象并沒有復(fù)制。
3.使用實(shí)例
需要拷貝的類上實(shí)現(xiàn)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") 引用發(fā)生變化 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); } }
到此,關(guān)于“java淺拷貝如何使用”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)砀鄬?shí)用的文章!