Shallow copy & Deep copy
来源:互联网 发布:苹果手机软件更新软件 编辑:程序博客网 时间:2024/05/09 16:20
面向对象编程语言都提供了内存中对象的复制能力,Java语言提供了对象的浅拷贝和深拷贝。
浅拷贝(Shallow copy):
复制一个对象时,如果它的一个属性是引用,则复制这个引用,使之指向内存中同一对象。
深拷贝(Deep copy):
但如果为此属性创建了一个新对象,让其引用它,则是深拷贝。
实现深拷贝:使类实现java.io.Serializable接口,把原型对象序列化,然后反序列后得到的对象,其实就是一个新的深拷贝对象。
package com.alex.prototypepattern;public class DeepCopyBeanTestDrive { public static void main(String[] args) { DeepCopyBean originalBean = new DeepCopyBean(); //create a String object in jvm heap originalBean.setName(new String("alex")); //create a String object in jvm string pool //originalBean.setName("alex"); originalBean.setAge(24); //clone this bean DeepCopyBean newBean = originalBean.deepCopy(); System.out.println("Primitive field use == tocompare : " + (newBean.getAge() == originalBean.getAge())); System.out.println("Object field use == to compare : " + (newBean.getName() == originalBean.getName())); System.out.println("Object field use equal to compare : " + (newBean.getName().equals(originalBean.getName()))); }}
package com.alex.prototypepattern;import java.io.ByteArrayInputStream;import java.io.ByteArrayOutputStream;import java.io.IOException;import java.io.ObjectInputStream;import java.io.ObjectOutputStream;import java.io.Serializable;public class DeepCopyBean implements Serializable{private String name ;private int age;public String getName() {return name;}public int getAge() {return age;}public void setName(String name) {this.name = name;}public void setAge(int age) {this.age = age;}public DeepCopyBean deepCopy(){ByteArrayOutputStream buf = new ByteArrayOutputStream();try {ObjectOutputStream oos = new ObjectOutputStream(buf);oos.writeObject(this);ObjectInputStream ois = new ObjectInputStream(new ByteArrayInputStream(buf.toByteArray()));try {return (DeepCopyBean)ois.readObject();} catch (ClassNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();}} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}return null;}}
- Deep copy & Shallow copy
- Shallow copy & Deep copy
- Deep Copy and Shallow Copy
- deep copy vs shallow copy
- Deep Copy VS Shallow Copy
- Shallow Copy and Deep Copy
- shallow copy and deep copy
- Shallow Copy与Deep Copy
- shallow copy与deep copy
- Deep copy and shallow copy
- deep copy and shallow copy
- shallow & deep copy
- Shallow vs. deep copy
- cocoa Shallow Copy与Deep Copy
- Java Clone, Shallow Copy and Deep Copy
- shallow copy 和 deep copy 的示例
- Shallow Copy,Deep Copy,Bitwise Copy和Memberwise Copy
- objective-c shallow- and deep-copy
- pdf之二 设置字体
- 当JNI遇到多线程--java对象如何被C++中的多个线程访问?
- 红眼航班 Red Eye
- HADOOP 磁盘满
- uva167 The Sultan's Successors
- Shallow copy & Deep copy
- 简述linux系统的目录结构作用和分区方案
- QT应用之透明背景_嵌入式freambuffer_QWS背景淡绿色问题
- linux系统硬盘分区概念
- Sql查询不重复单一记录
- TUXEDO MP单域部署
- 如何确定一个机器的字节顺序是大端还是小端
- rtb : Cocoa/iPhone App/Library 嵌入资源文件
- css的兼容性:IE6不支持max-width和min-height,应该如何写代码才能正常显示