Java对象的拷贝
2015-02-05 00:00
309 查看
摘要: Java对象的拷贝
上文提到hibernate三种对象状态,对于持久态的对象我们进行set时数据库就会做更新。鉴于此,我们可以将该持久化状态对象copy一份,然后对copy过来的对象做操作,就不会影响原来的持久化状态对象了。有关Java对象拷贝如下文:
转载
1.java里的clone分为:
A:浅复制(浅克隆): 浅复制仅仅复制所考虑的对象,而不复制它所引用的对象。
b:深复制(深克隆):深复制把要复制的对象所引用的对象都复制了一遍。
Java中对象的克隆,为了获取对象的一份拷贝,我们可以利用Object类的clone()方法。必须要遵循下面三点
1.在派生类中覆盖基类的clone()方法,并声明为public【Object类中的clone()方法为protected的】。
2.在派生类的clone()方法中,调用super.clone()。
3.在派生类中实现Cloneable接口。
Object类里的clone方法是浅复制(浅克隆)
浅复制(浅克隆)的例子如下:
2.深复制(深Clone)例子:
上文提到hibernate三种对象状态,对于持久态的对象我们进行set时数据库就会做更新。鉴于此,我们可以将该持久化状态对象copy一份,然后对copy过来的对象做操作,就不会影响原来的持久化状态对象了。有关Java对象拷贝如下文:
转载
1.java里的clone分为:
A:浅复制(浅克隆): 浅复制仅仅复制所考虑的对象,而不复制它所引用的对象。
b:深复制(深克隆):深复制把要复制的对象所引用的对象都复制了一遍。
Java中对象的克隆,为了获取对象的一份拷贝,我们可以利用Object类的clone()方法。必须要遵循下面三点
1.在派生类中覆盖基类的clone()方法,并声明为public【Object类中的clone()方法为protected的】。
2.在派生类的clone()方法中,调用super.clone()。
3.在派生类中实现Cloneable接口。
Object类里的clone方法是浅复制(浅克隆)
浅复制(浅克隆)的例子如下:
public class CloneTest { public static void main(String[] args) throws Exception { // teacher对象将被clone出来的Student对象共享. Teacher teacher = new Teacher(); teacher.setAge(40); teacher.setName("Teacher zhang"); Student student1 = new Student(); student1.setAge(20); student1.setName("zhangsan"); student1.setTeacher(teacher); // 复制出来一个对象student2 Student student2 = (Student) student1.clone(); System.out.println(student2.getAge()); System.out.println(student2.getName()); System.out.println("~~~~~~~~~~~~~~~~~~~~~~"); System.out.println(student1.getTeacher().getAge()); System.out.println(student1.getTeacher().getName()); // 修改student2的引用对象 student2.getTeacher().setAge(50); student2.getTeacher().setName("Teacher Li"); System.out.println("~~~~~~~~~~~~~~~~~~~~~~"); System.out.println(student1.getTeacher().getAge()); System.out.println(student1.getTeacher().getName()); } } class Teacher { public int age; public String name; public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } } class Student implements Cloneable { public int age; public String name; public Teacher teacher; public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Teacher getTeacher() { return teacher; } public void setTeacher(Teacher teacher) { this.teacher = teacher; } @Override public Object clone() throws CloneNotSupportedException { return super.clone(); } } 输出结果为: 20 zhangsan ~~~~~~~~~~~~~~~~~~~~~~ 40 Teacher zhang ~~~~~~~~~~~~~~~~~~~~~~ 50 Teacher Li
2.深复制(深Clone)例子:
public class DeepCloneTest { public static void main(String[] args) throws Exception { // teacher对象将不被clone出来的Student对象共享. Teacher teacher = new Teacher(); teacher.setAge(40); teacher.setName("Teacher zhang"); Student student1 = new Student(); student1.setAge(20); student1.setName("zhangsan"); student1.setTeacher(teacher); // 复制出来一个对象student2 Student student2 = (Student) student1.clone(); System.out.println(student2.getAge()); System.out.println(student2.getName()); System.out.println("~~~~~~~~~~~~~~~~~~~~~~"); System.out.println(student1.getTeacher().getAge()); System.out.println(student1.getTeacher().getName()); // 修改student2的引用对象 student2.getTeacher().setAge(50); student2.getTeacher().setName("Teacher Li"); System.out.println("~~~~~~~~~~~~~~~~~~~~~~"); System.out.println(student1.getTeacher().getAge()); System.out.println(student1.getTeacher().getName()); } } class Teacher implements Cloneable { public int age; public String name; public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } @Override public Object clone() throws CloneNotSupportedException { return super.clone(); } } class Student implements Cloneable { public int age; public String name; public Teacher teacher; public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Teacher getTeacher() { return teacher; } public void setTeacher(Teacher teacher) { this.teacher = teacher; } @Override public Object clone() throws CloneNotSupportedException { Student student = (Student) super.clone(); // 将引用的对象teacher也clone下 student.setTeacher((Teacher) (student.getTeacher().clone())); return student; } } 输出结果为: 20 zhangsan ~~~~~~~~~~~~~~~~~~~~~~ 40 Teacher zhang ~~~~~~~~~~~~~~~~~~~~~~ 40 Teacher zhang
相关文章推荐
- java传递是引用的拷贝,既不是引用本身,更不是对象
- Java中三种变量的拷贝方法比较: 值变量,对象变量,字符串变量
- java对象浅拷贝与深拷贝区别
- java中对象的值引用和值拷贝 以及对象的深克隆,浅克隆
- Java通过反射实现简单对象的拷贝
- 通过JAVA的Serialization机制进行对象的拷贝
- Java对象的 深拷贝和浅拷贝
- java对象拷贝——PropertyUtils.copyProperties()用法和性能
- JAVA 对象拷贝
- java 对象深拷贝通用方法
- java拷贝对象
- java基础之对象的clone(浅拷贝)
- java学习笔记-数组,对象的拷贝
- java传值(简单类传递的是值拷贝,类对象传递的是地址拷贝)
- JAVA对象拷贝
- java对象拷贝(java反射)
- JAVA读取PROPERTIY文件/JAVA拷贝一个对象的方式
- java不同类型对象之间的拷贝
- java对象的深拷贝浅拷贝
- java 对象深拷贝通用方法