iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >Java深度复制功能与用法实例分析
  • 711
分享到

Java深度复制功能与用法实例分析

2023-05-30 16:05:31 711人浏览 泡泡鱼
摘要

本文实例讲述了Java深度复制功能与用法。分享给大家供大家参考,具体如下:写在前面:什么是深度复制?在Java里面,在创建一个对象,我们通常会有一个引用指向该对象,当我们通过引用变量改变对象的值(属性)时,引用是不变的,变的是内存里面的那块

本文实例讲述了Java深度复制功能与用法。分享给大家供大家参考,具体如下:

写在前面:

什么是深度复制?在Java里面,在创建一个对象,我们通常会有一个引用指向该对象,当我们通过引用变量改变对象的值(属性)时,引用是不变的,变的是内存里面的那块内存,即引用所指向的对象。一般情况下,我们将该引用赋给另一个引用变量或者作为参数传递时,传递的也只是引用,即将引用指向“复制”了一份给另一个引用变量,随后该引用变量也指向同一个对象,内存里面并没有创建一个新的对象。在某些情况下,我们需要“真正复制”对象,创建一份已知对象的copy,而不仅仅“复制”引用,用作备份也好,其他操作也好。

那么,该如何实现?

先说下思路:首先将对象序列化到流里,然后再反序列化,从流里读取出来即可。

下面上代码:

package com.yo.java;import java.io.ByteArrayInputStream;import java.io.ByteArrayOutputStream;import java.io.IOException;import java.io.ObjectInputStream;import java.io.ObjectOutputStream;import java.io.Serializable;import java.util.ArrayList;import java.util.List;public class DeepCopy implements Serializable{  int i;    public static void main(String[] args) throws ClassNotFoundException, IOException {    demo1();    demo2();  }    public static Object deepCopy(Object o) throws IOException, ClassNotFoundException {//   //先序列化,写入到流里    ByteArrayOutputStream bo = new ByteArrayOutputStream();    ObjectOutputStream oo = new ObjectOutputStream(bo);    oo.writeObject(o);    //然后反序列化,从流里读取出来,即完成复制    ByteArrayInputStream bi = new ByteArrayInputStream(bo.toByteArray());    ObjectInputStream oi = new ObjectInputStream(bi);    return oi.readObject();  }    public static void demo1() throws ClassNotFoundException, IOException {    System.out.println("===========未使用深度复制=========");    DeepCopy dc1 = new DeepCopy();    dc1.i = 1;//初始化dc1里i的值    DeepCopy dc2 = dc1;    dc1.i = 2;//改变dc1里i的值    System.out.println("dc1 : " + dc1.i);    System.out.println("dc2(引用传递) : " + dc2.i);    System.out.println("===========使用深度复制=========");    DeepCopy dc3 = new DeepCopy();    dc3.i = 1;//初始化dc3里i的值    DeepCopy dc4 = (DeepCopy)deepCopy(dc3);    dc3.i = 2;//改变dc3里i的值    System.out.println("dc3 : " + dc3.i);    System.out.println("dc4(深度复制) : " + dc4.i);  }    public static void demo2() throws ClassNotFoundException, IOException {    System.out.println("===========未使用深度复制=========");    //创建DeepCopy对象,并初始化i的值,添加到list1集合    DeepCopy dc = new DeepCopy();    dc.i = 1;//初始化dc1里i的值    List<DeepCopy> list1 = new ArrayList<DeepCopy>();    list1.add(dc);    //未使用深度复制    List<DeepCopy> list2 = new ArrayList<DeepCopy>(list1);//这里与使用Collections.copy(dest, src)结果一样    //改变list1中元素的值    for(DeepCopy d1 : list1) {      //改变dc1里i的值      d1.i = 2;    }    //遍历list    for(DeepCopy d1 : list1) {      System.out.println("list1 : " + d1.i);    }    //遍历list2    for(DeepCopy d2 : list2) {      System.out.println("list2(复制) : " + d2.i);    }    System.out.println("===========使用深度复制后=========");    DeepCopy dc3 = new DeepCopy();    dc3.i = 1;//初始化dc3里i的值    List<DeepCopy> list3 = new ArrayList<DeepCopy>();    list3.add(dc3);    List<DeepCopy> list4 = (List<DeepCopy>) deepCopy(list3);    for(DeepCopy d : list3) {      //改变dc3里i的值      d.i = 2;    }    for(DeepCopy d3 : list3) {      System.out.println("list3 : " + d3.i);    }    for(DeepCopy d4 : list4) {      System.out.println("list4(深度复制): " + d4.i);    }  }}

--结束END--

本文标题: Java深度复制功能与用法实例分析

本文链接: https://www.lsjlt.com/news/219916.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Java深度复制功能与用法实例分析
    本文实例讲述了Java深度复制功能与用法。分享给大家供大家参考,具体如下:写在前面:什么是深度复制?在Java里面,在创建一个对象,我们通常会有一个引用指向该对象,当我们通过引用变量改变对象的值(属性)时,引用是不变的,变的是内存里面的那块...
    99+
    2023-05-30
  • Vue.js之slot深度复制的示例分析
    这篇文章给大家分享的是有关Vue.js之slot深度复制的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。前言在Vue中,slot是一个很有用的特性,可以用来向组件内部插入...
    99+
    2024-04-02
  • mysql视图功能与用法实例分析
    本文实例讲述了mysql视图功能与用法。分享给大家供大家参考,具体如下: 通俗的讲,视图就是一条SELECT语句执行后返回的结果集。 //单表视图 CREATE [ALGORITHM]={U...
    99+
    2024-04-02
  • Java时间复杂度与空间复杂度实例分析
    本篇内容主要讲解“Java时间复杂度与空间复杂度实例分析”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java时间复杂度与空间复杂度实例分析”吧!一、算法效率算法效率分析分为两种:第一种是时间效...
    99+
    2023-06-29
  • PHP数组的复制策略:深度复制与浅复制,解析与性能对比
    在 php 中,数组复制有两种策略:深度复制和浅复制。深度复制创建源数组的独立副本,对其中一个数组的更改不会影响另一个数组。浅复制仅复制数组的引用,对其中一个数组的更改会反映在另一个数组...
    99+
    2024-05-02
    深度复制 浅复制
  • Python深度学习算法实例分析
    本篇内容主要讲解“Python深度学习算法实例分析”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python深度学习算法实例分析”吧!最小二乘法所有的深度学习算法都始于下面这个数学公式(我已将其...
    99+
    2023-06-03
  • Java中深度优先与广度优先的示例分析
    这篇文章给大家分享的是有关Java中深度优先与广度优先的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。Java可以用来干什么Java主要应用于:1. web开发;2. Android开发;3. 客户端开发...
    99+
    2023-05-30
    java
  • 汇编语言功能实现数据复制实例分析
    这篇文章主要讲解了“汇编语言功能实现数据复制实例分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“汇编语言功能实现数据复制实例分析”吧!问题1:将内存ffff:0~ffff:b单元中的数据复...
    99+
    2023-06-25
  • SpringBoot深入分析运行原理与功能实现
    目录前言pom.xml文件分析启动器starter启动引导类内置的服务器内嵌Tomcat定义位置tomcat运行原理修改服务器添加服务器更换内嵌服务器前言 我们从以下几个方面研究: ...
    99+
    2024-04-02
  • JavaScript树结构深度优先算法实例分析
    这篇文章主要介绍了JavaScript树结构深度优先算法实例分析的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇JavaScript树结构深度优先算法实例分析文章都会有所收获,下面我们一起来看看吧。什么是树在现实...
    99+
    2023-07-02
  • 深入分析java与C#底层控制能力区别及示例详解
    目录比如在 C# 里面你能干的再有你还可以手动在栈上分配空间接着你想绕过 GC 直接手动分配堆内存接下来你想创建一个显式内存布局的结构 Foo从堆内存创建自然也没问题我们想自行决定动...
    99+
    2024-04-02
  • PHP深度复制数组的全面指南:方法剖析与性能对比
    深度复制php数组的方法:array_map()、clone()、json序列化和反序列化、recurse_copy()。性能对比显示,在php 7.4+版本中,recurse_copy...
    99+
    2024-05-02
    php 数组复制
  • C语言时间复杂度与空间复杂度实例分析
    这篇文章主要介绍“C语言时间复杂度与空间复杂度实例分析”,在日常操作中,相信很多人在C语言时间复杂度与空间复杂度实例分析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C语言时间复杂度与空间复杂度实例分析”的疑...
    99+
    2023-06-29
  • PHP数组深度复制的性能效率:不同方法的对比分析
    php 数组深度复制效率对比:clone效率最高,可提高7倍以上性能。array_merge_recursive效率最低。对于复杂数组,clone是最佳选择。 PHP数组深度复制的性能...
    99+
    2024-04-30
    php 深度复制
  • Java序列化与字典功能的序列化实例分析
    这篇文章主要介绍了Java序列化与字典功能的序列化实例分析的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Java序列化与字典功能的序列化实例分析文章都会有所收获,下面我们一起来看看吧。两种解决方案前端查询字典数...
    99+
    2023-07-02
  • Java分治法与二分搜索算法实例分析
    本文实例讲述了Java分治法与二分搜索算法。分享给大家供大家参考,具体如下:1、分治法分治法的基本思想是将一个规模为n的问题分解为k个规模较小的子问题,这些子问题相互独立且与原问题相同。递归的解这些子问题,然后将各子问题的解合并得到原问题的...
    99+
    2023-05-30
    java 分治法 二分搜索
  • Java和.NET的GZIP压缩功能实例分析
    本篇内容介绍了“Java和.NET的GZIP压缩功能实例分析”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!代码解析1)Java GZIPOu...
    99+
    2023-06-17
  • webpack实用小功能的示例分析
    这篇文章主要介绍webpack实用小功能的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!webpack比较实用的功能1.overlayoverlay属于devServer的属...
    99+
    2024-04-02
  • mysql中复制原理与实践应用的示例分析
    这篇文章主要介绍了mysql中复制原理与实践应用的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。复制功能是将一个mysql数据库上的...
    99+
    2024-04-02
  • Java方法使用实例分析
    这篇“Java方法使用实例分析”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Java方法使用实例分析”文章吧。一、方法的概念...
    99+
    2023-06-30
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作