介绍
今天就跟大家聊聊有关怎么在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 ListmyDog; ,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中利用克隆实现深拷贝与浅拷贝