怎么在Java中利用克隆实现深拷贝与浅拷贝

  介绍

今天就跟大家聊聊有关怎么在Java中利用克隆实现深拷贝与浅拷贝,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

package  com.lxk.model;      public  class  Student  implements  Cloneable  {   ,private  String 名称;   ,private  Car 汽车;   ,public  String  getName (), {   ,return 名称;   ,}   ,public  void  setName (String 名称),{=,this.name 名称;   ,}   ,public  Car  getCar (), {   ,return 汽车;   ,}   ,public  void  setCar (Car 车),{=,this.car 汽车;   ,}   ,@Override   ,public  String  toString (), {   ,return “学生{“+   ,“name=& # 39;“, +, name  +, & # 39; \ & # 39; & # 39; +   ,,,车=?+,car  +   ,& # 39;}& # 39;;   ,}   ,@Override   ,public  Student 克隆(),{   ,Student  Student =,空;   ,try  {   ,student =,(学生),super.clone ();   ,}catch  (CloneNotSupportedException 忽略),{   ,System.out.println (ignored.getMessage ());   ,}   ,return 学生;   ,}   }

学生内部引用了车这个bean

package  com.lxk.model;   import 并不知道;   public  class  Car  implements  Comparable< Car>, {   ,private  String 符号;   ,private  int 价格;   ,private  List myDog;   ,private  List< String>,男孩;   ,public 汽车(),{   ,}   ,public 汽车(String 标志,int 价格),{=,this.sign 符号;=,this.price 价格;   ,}   ,public 汽车(String 标志,int 价格,,List, myDog), {=,this.sign 符号;=,this.price 价格;=,,this.myDog  myDog;   ,}   ,public 汽车(String 标志,int 价格,,List, myDog,, List,男孩),{=,this.sign 符号;=,this.price 价格;=,,this.myDog  myDog;=,this.boys ,男孩;   ,}   ,public  String  getSign (), {   ,return 符号;   ,}   ,public  void  setSign (String 标志),{=,this.sign 符号;   ,}   ,public  int  getPrice (), {   ,return 价格;   ,}   ,public  void  setPrice (int 价格),{=,this.price 价格;   ,}   ,public  List getMyDog (), {   ,return  myDog;   ,}   ,public  void  setMyDog (List getBoys (), {   ,return 男孩;   ,}   ,public  void  setBoys (List

最后就主要是测试类

package  com.lxk.findBugs;   import  com.lxk.model.Car;   import  com.lxk.model.Student;/* *   ,*引用传递也就是地址传递需要注意的地方,引起的bug   ,* & lt; p>   ,* Created  by  lxk 提醒2017/3/23   ,*/public  class  Bug2  {   ,public  static  void  main (String [], args), {   ,Student  student1 =, new 学生();   ,Car  Car =, new 汽车(“oooo",, 100);   ,student1.setCar(车);   ,student1.setName (“lxk");   ,//克隆完之后,学生1和学生二应该没关系的,修改学生一不影响学生二的值,但是完之后发现,你修改车的值,学生二也受影响啦。   ,Student  student2 =, student1.clone ();   第二,System.out.println(“学生:“,+,学生二);//先输出学生二刚刚克隆完之后的值,然后在修改学生1的相关引用类型的属性值(汽车)和基本属性值(名字)   ,car.setSign (“X5");   ,student1.setName (“xxx");   第二,System.out.println(“学生:“,+,学生二);//再次输出看修改的结果   ,}   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null

怎么在Java中利用克隆实现深拷贝与浅拷贝