Java技巧:深拷贝的两种方式2(转)
生活随笔
收集整理的這篇文章主要介紹了
Java技巧:深拷贝的两种方式2(转)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
②繼承自java.lang.Object類的clone()方法是淺復制。以下代碼可以證明之。class?Professor? ? {? ? ????String?name;? ? ????int?age;? ? ????Professor(String?name,int?age)? ? ????{? ? ????????this.name=name;? ? ????????this.age=age;? ? ????}? ? }? ? class?Student?implements?Cloneable? ? {? ? ????String?name;//常量對象。? ? ????int?age;? ? ????Professor?p;//學生1和學生2的引用值都是一樣的。? ? ????Student(String?name,int?age,Professor?p)? ? ????{? ? ????????this.name=name;? ? ????????this.age=age;? ? ????????this.p=p;? ? ????}? ? ????public?Object?clone()? ? ????{? ? ????????Student?o=null;? ? ????????try? ? ????????{? ? ????????????o=(Student)super.clone();? ? ????????}? ? ????????catch(CloneNotSupportedException?e)? ? ????????{? ? ????????????System.out.println(e.toString());? ? ????????}? ? ????????o.p=(Professor)p.clone();? ? ????????return?o;? ? ????}? ? }? ? public?static?void?main(String[]?args)? ? ????{? ? ??????Professor?p=new?Professor("wangwu",50);? ? ??????Student?s1=new?Student("zhangsan",18,p);? ? ??????Student?s2=(Student)s1.clone();? ? ??????s2.p.name="lisi";? ? ?????s2.p.age=30;? ? System.out.println("name="+s1.p.name+","+"age="+s1.p.age);//學生1的教授? ? ????????????????????????????????????????????????????????????????????????????????????????????????????????????????//成為lisi,age為30。? ? }? ? 那應該如何實現深層次的克隆,即修改s2的教授不會影響s1的教授?代碼改進如下。
轉載于:https://blog.51cto.com/2153340/534816
總結
以上是生活随笔為你收集整理的Java技巧:深拷贝的两种方式2(转)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 红色小方块单击爆炸式展开的菜单代码
- 下一篇: ArcGIS地理信息系统空间分析实验教程