淺談Java中的克隆close()和賦值引用的區(qū)別
學(xué)生類Student:
package 克隆clone; /*要克隆必須實(shí)現(xiàn)這個(gè)借口:Cloneable,以標(biāo)記這個(gè)對(duì)象可以克隆 Cloneable:此類實(shí)現(xiàn)了 Cloneable 接口,以指示 Object.clone() 方法可以合法地對(duì)該類實(shí)例進(jìn)行按字段復(fù)制。 這個(gè)接口是標(biāo)記接口,告訴我們實(shí)現(xiàn)該接口的類就可以實(shí)現(xiàn)對(duì)象的復(fù)制了。 */ public class Student implements Cloneable { private String name; private int age; public Student() { } public Student(String name, int age) { super(); this.name = name; this.age = age; } 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; } // 重寫克隆方法子列才可以調(diào)用 @Override protected Object clone() throws CloneNotSupportedException { return super.clone(); } }
測試克隆學(xué)生類:
package 克隆clone; /* * protected void finalize():當(dāng)垃圾回收器確定不存在對(duì)該對(duì)象的更多引用時(shí),由對(duì)象的垃圾回收器調(diào)用此方法。用于垃圾回收,但是什么時(shí)候回收不確定。 * protected Object clone():創(chuàng)建并返回此對(duì)象的一個(gè)副本。 * A:重寫該方法 * * Cloneable:此類實(shí)現(xiàn)了 Cloneable 接口,以指示 Object.clone() 方法可以合法地對(duì)該類實(shí)例進(jìn)行按字段復(fù)制。 * 這個(gè)接口是標(biāo)記接口,告訴我們實(shí)現(xiàn)該接口的類就可以實(shí)現(xiàn)對(duì)象的復(fù)制了。 */ public class StudentClone { public static void main(String[] args) throws CloneNotSupportedException { //創(chuàng)建學(xué)生對(duì)象 Student s = new Student(); s.setName("林青霞"); s.setAge(27); //克隆學(xué)生對(duì)象 Object obj = s.clone(); Student s2 = (Student)obj; System.out.println("---------"); System.out.println(s.getName()+"---"+s.getAge()); System.out.println(s2.getName()+"---"+s2.getAge()); //以前的做法 Student s3 = s; System.out.println(s3.getName()+"---"+s3.getAge()); System.out.println("---------"); //其實(shí)是有區(qū)別的 s3.setName("劉意"); s3.setAge(30); System.out.println(s.getName()+"---"+s.getAge()); System.out.println(s2.getName()+"---"+s2.getAge()); System.out.println(s3.getName()+"---"+s3.getAge()); System.out.println("---------"); //把克隆的改一下呢? s2.setName("克隆改的名稱"); s2.setAge(66); System.out.println(s.getName()+"---"+s.getAge()); System.out.println(s2.getName()+"---"+s2.getAge()); System.out.println(s3.getName()+"---"+s3.getAge()); //也就是說把一個(gè)對(duì)象的引用賦值給一個(gè)引用,當(dāng)這個(gè)引用發(fā)什么該改變的時(shí)候,同一個(gè)引用指向的對(duì)象會(huì)發(fā)生改變,但是克隆的不會(huì)變化, //把克隆的對(duì)象改變他的一些屬性,那么也不會(huì)影響到其他的對(duì)象的值的改變 } }
以上就是小編為大家?guī)淼臏\談Java中的克隆close()和賦值引用的區(qū)別的全部內(nèi)容了,希望對(duì)大家有所幫助,多多支持腳本之家~
相關(guān)文章
JavaWeb實(shí)體類轉(zhuǎn)為json對(duì)象的實(shí)現(xiàn)方法
這篇文章主要介紹了JavaWeb實(shí)體類轉(zhuǎn)為json對(duì)象的實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12Spring Boot打開URL出現(xiàn)signin問題的解決
這篇文章主要介紹了Spring Boot打開URL出現(xiàn)signin問題的解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-12-12Spring boot + mybatis + Vue.js 
這篇文章主要介紹了Spring boot + mybatis + Vue.js + ElementUI 實(shí)現(xiàn)數(shù)據(jù)的增刪改查實(shí)例代碼(二),非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2017-05-05詳解springboot+aop+Lua分布式限流的最佳實(shí)踐
這篇文章主要介紹了詳解springboot+aop+Lua分布式限流的最佳實(shí)踐,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-06-06Java日常練習(xí)題,每天進(jìn)步一點(diǎn)點(diǎn)(5)
下面小編就為大家?guī)硪黄狫ava基礎(chǔ)的幾道練習(xí)題(分享)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧,希望可以幫到你2021-07-07IDEA2020 1.1中Plugins加載不出來的問題及解決方法
這篇文章主要介紹了IDEA2020 1.1中Plugins加載不出來的問題,本文還給大家提到了IDEA 2020.1.1 找不到程序包和符號(hào)的問題,感興趣的朋友跟隨小編一起看看吧2020-06-06