posts - 108,comments - 56,trackbacks - 0
                ☆什么是Clone
            Clone就是得到一個對象x的副本,而且x.clone() != x。Clone分為兩種:淺度克隆Shallow Clone和淺度克隆Deep Clone


                 Object類有clone()方法: protected native Object clone() throws CloneNotSupportedException; 但是Object本身沒有implements  Cloneable,在執(zhí)行clone方法時,先檢查this.getClass()是否實現(xiàn)了cloneable接口,如果沒有實現(xiàn)Cloneable接口,clone()就會拋CloneNotSupportedException返回。否則就會創(chuàng)建一個新的this.getClass()的對象other,并將this每一個field的值賦值給other的對應field,然后返回other。

                 接口Cloneable起一個標志作用(和Serializable類似),用來標志該類具有克隆功能。



                ☆實現(xiàn)Shallow clone
            Shallow Clone只是將基本類型賦值過去,對于對象傳的是引用。(String對于比較特別,[一般內(nèi)容一樣則引用一樣,輕量級模式])
          Shallow Clone
          輸出結(jié)果


                ☆Shallow Clone的問題
            因為對于對象只是拷貝引用,所有就會造成this對其中對象的修改引起other中相應對象的修改,例子如下:
          Shallow Clone問題
          輸出結(jié)果


                ☆Deep Clone
            有些時候我們不希望this與other之間的修改相互影響,這時就應該用深度克隆。對所有涉及到的對象也實現(xiàn)Clone。
          Deep Clone
          輸出結(jié)果


                ☆參考
                http://www.aygfsteel.com/orangelizq/archive/2007/10/17/153573.html
                http://www.aygfsteel.com/junky/archive/2007/05/08/115928.html
          posted on 2008-01-30 16:41 破繭而出 閱讀(714) 評論(0)  編輯  收藏 所屬分類: Java
          主站蜘蛛池模板: 鹰潭市| 嘉兴市| 旬阳县| 闽侯县| 介休市| 城步| 浙江省| 象州县| 来宾市| 枣庄市| 台南市| 禄劝| 美姑县| 松江区| 靖远县| 钟祥市| 深泽县| 文山县| 伊金霍洛旗| 高碑店市| 永顺县| 泾川县| 勃利县| 鄱阳县| 隆昌县| 阿克陶县| 宝应县| 临泉县| 福安市| 惠来县| 福贡县| 临沧市| 阿尔山市| 永嘉县| 睢宁县| 屯门区| 江川县| 平乐县| 突泉县| 定结县| 阿鲁科尔沁旗|