首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

浅谈java轻重拷贝

2013-08-04 
浅谈java深浅拷贝在一个论坛上看到了一个关于深浅拷贝的文章,引用地址:http://bbs.itcast.cn/thread-14646

浅谈java深浅拷贝
在一个论坛上看到了一个关于深浅拷贝的文章,引用地址:http://bbs.itcast.cn/thread-14646-1-2.html
概念:
(1)浅拷贝(浅克隆)被复制对象的所有变量都含有与原来对象相同的值,而所有的对其他对象的引用仍然只指向原来的对象。
(2)深拷贝(深克隆)被复制对象的所有变量都含有与原来的对象相同的值,那些引用其他对象的变量将指向被复制过的新对象,深复制把要复制的对象所引用的对象都复制了一遍。
实现拷贝需要实现Cloneable接口并且重写clone方法。
(1)如果类型仅包含值类型(int,byte等类型)和string类型的数据成员,我们只要在clone方法中初始化一个新的对象,并调用超类的方法clone方法。
(2)如果自定义类型包含引用类型的数据成员,必须考虑clone方法是实现浅拷贝(shallow copy)还是深拷贝(deep copy)。
话不多说:贴代码:

package test.clone;public class Person implements Cloneable{String name;String age;public String getName() {return name;}public void setName(String name) {this.name = name;}public String getAge() {return age;}public void setAge(String age) {this.age = age;}@Override    public Object clone()  {Person p=null;       try{       p=(Person) super.clone();       }catch(CloneNotSupportedException e)   {       e.printStackTrace();    }      return p;      }    }package test.clone;public class Student implements Cloneable{Person person;String klass;public Person getPerson() {return person;}public void setPerson(Person person) {this.person = person;}public String getKlass() {return klass;}public void setKlass(String klass) {this.klass = klass;}@Override    public Object clone() {        Student obj = null;        try {            obj = (Student) super.clone();        } catch (CloneNotSupportedException ex) {            ex.printStackTrace();        }        obj.person=(Person)person.clone();//如果没有这句则属于浅拷贝;读者可以自行测试        return obj;    }}package test.clone;public class TestClone {public static void main(String[] args) {Student s1=new Student();Person p1=new Person();p1.setName("Student1");p1.setAge("21");s1.setKlass("class1");s1.setPerson(p1);Student s2=(Student) s1.clone();s2.getPerson().setName("Student2");System.out.println(s1.getPerson().getName()+"------克隆之前的Student1");System.out.println(s2.getPerson().getName()+"------克隆之后的Student2");}}运行结果:Student1------克隆之前的Student1Student2------克隆之后的Student2

热点排行