zoukankan      html  css  js  c++  java
  • Java 浅复制和深复制

    概念

    浅复制:将一个对象复制后,基本数据类型的变量都会重新创建,而引用类型,指向的还是原对象所指向的。

    深复制:将一个对象复制后,不论是基本数据类型还有引用类型,都是重新创建的。简单来说,就是深复制进行了完全彻底的复制,而浅复制不彻底。

    例子

     1 import java.io.ByteArrayInputStream;
     2 import java.io.ByteArrayOutputStream;
     3 import java.io.IOException;
     4 import java.io.ObjectInputStream;
     5 import java.io.ObjectOutputStream;
     6 import java.io.Serializable;
     7 
     8 public class Prototype {
     9     private static final long serialVersionUID = 1L;
    10     private String string;
    11 
    12     private SerializableObject obj;
    13 
    14     /* 浅复制 */
    15     public Object clone() throws CloneNotSupportedException {
    16         Prototype proto = (Prototype) super.clone();
    17         return proto;
    18     }
    19 
    20     /* 深复制 */
    21     public Object deepClone() throws IOException, ClassNotFoundException {
    22 
    23         /* 写入当前对象的二进制流 */
    24         ByteArrayOutputStream bos = new ByteArrayOutputStream();
    25         ObjectOutputStream oos = new ObjectOutputStream(bos);
    26         oos.writeObject(this);
    27 
    28         /* 读出二进制流产生的新对象 */
    29         ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray());
    30         ObjectInputStream ois = new ObjectInputStream(bis);
    31         return ois.readObject();
    32     }
    33 
    34     public String getString() {
    35         return string;
    36     }
    37 
    38     public void setString(String string) {
    39         this.string = string;
    40     }
    41 
    42     public SerializableObject getObj() {
    43         return obj;
    44     }
    45 
    46     public void setObj(SerializableObject obj) {
    47         this.obj = obj;
    48     }
    49 }
    50 
    51 
    52 class SerializableObject implements Serializable {
    53     private static final long serialVersionUID = 1L;
    54 }

    要实现深复制,需要采用流的形式读入当前对象的二进制输入,再写出二进制数据对应的对象。

    参考资料

  • 相关阅读:
    caffe用到的命令和零碎知识
    Manjaro — ssh出现22端口拒绝访问问题(port 22: Connection refused)
    Linux 解压z01 .z02 .z03... zip分卷
    Manjaro_Windows双系统安装
    Linux 的chsh命令
    mat2json, python读取mat成字典, 保存json
    最便捷的caffe编译方法 ---- cmake+anaconda虚拟环境
    复制跳过软链接
    使用Screen解决ssh连接中断导致的训练中断问题
    Caffe训练时Loss=87.3365问题
  • 原文地址:https://www.cnblogs.com/yuxiaoqi/p/4789442.html
Copyright © 2011-2022 走看看