Java浅拷贝、深拷贝

2023-12-19

浅拷贝

新对象和原对象的成员变量一致,引用变量也指向同一个对象,其中一个对象改变引用变量指向的对象内容,另一个对象中同样的变量也会跟着改变,即对于引用变量,浅拷贝复制的是其地址,并非对象本身。如下:

@Data
public class User {

    private String name;

    private int age;

    public static void main(String[] args) {
        User user = new User();
        user.setName("aaa");
        user.setAge(10);
        User userCopy = user;
        System.out.println("user :" + user.toString());
        System.out.println("userCopy :" + userCopy.toString());
        user.setName("bbb");
        user.setAge(12);
        System.out.println("user :" + user.toString());
        System.out.println("userCopy :" + userCopy.toString());
    }
}

//输出    
//    user :User(name=aaa, age=10)
//    userCopy :User(name=aaa, age=10)
//    user :User(name=bbb, age=12)
//    userCopy :User(name=bbb, age=12)
深拷贝

新对象和旧对象的成员变量的值一致,新对象中的引用变量指向的对象也是被复制了新对象,其中一个对象改变引用变量指向的对象内容,另一个对象中同样的变量不会跟着改变,即对于引用变量,深拷贝复制的对象本身。如下:

@Data
public class User implements Cloneable{

    private String name;

    private int age;

    @Override
    protected Object clone() throws CloneNotSupportedException {
        return super.clone();
    }

    public static void main(String[] args) throws CloneNotSupportedException {
        User user = new User();
        user.setName("aaa");
        user.setAge(10);
        User userCopy = (User) user.clone();
        System.out.println("user :" + user.toString());
        System.out.println("userCopy :" + userCopy.toString());
        user.setName("bbb");
        user.setAge(12);
        System.out.println("user :" + user.toString());
        System.out.println("userCopy :" + userCopy.toString());
    }

//输出
//    user :User(name=aaa, age=10)
//    userCopy :User(name=aaa, age=10)
//    user :User(name=bbb, age=12)
//    userCopy :User(name=aaa, age=10)
}
深拷贝方式
  1. 被拷贝的类实现Cloneable接口,然后重写clone方法,拷贝时调用clone方法,所有引用类型的成员变量的类型都要实现Cloneable接口,然后重写clone方法。
  2. Apache Commons Lang的SerializationUtils工具类。
  3. json序列化、再反序列化,如:User userCopy1 = (User) JSON.parse(JSON.toJSONString(user));
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java浅拷贝、深拷贝 的相关文章

  • 位图内存不足错误

    我对这个错误有疑问 我从 URL 制作网站图标解析器 我这样做是这样的 public class GrabIconsFromWebPage public static String replaceUrl String url StringB
  • MongoTemplate upsert - 从 pojo 进行更新的简单方法(哪个用户已编辑)?

    这是一个简单的 pojo public class Description private String code private String name private String norwegian private String en
  • Jackson - 反序列化嵌套 JSON

    我有一个 JSON 字符串 其格式如下 response execution status ready report cache hit true created on 2013 07 29 08 42 42 fact cache erro
  • 如何在远程 WebSphere 上进行 JNDI 查找期间解决 sun/io/MalformedInputException

    我使用 WebSphere 8 5 来托管我的应用程序 并在应用程序服务器上配置了一些 JDBC 资源 我还使用瘦客户端运行时库开发了一个客户端应用程序 当按以下方式执行 JNDI 查找时 env put Context INITIAL C
  • RMI 中的引用传递问题? [复制]

    这个问题在这里已经有答案了 有人可以告诉我我错在哪里 为什么这个 RMI 聊天应用程序不起作用 目标是通过远程对象或序列化对象实现客户端 服务器和逻辑之间的解耦 import javax swing import java awt even
  • 正则表达式获取字符串中的第一个数字和其他字符

    我是正则表达式的新手 想知道如何才能只获取字符串中的第一个数字 例如100 2011 10 20 14 28 55 在这种情况下 我希望它返回100 但该数字也可以更短或更长 我在想类似的事情 0 9 但它单独获取每个数字 100 2001
  • Java Microsoft Excel API [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 所有平台上的java

    如果您想用 java 为 Windows Mac 和 Linux 编写桌面应用程序 那么所有这些代码都相同吗 您只需更改 GUI 即可使 Windows 应用程序更像 Windows 等等 如果不深入细节 它是如何工作的 Java 的卖点之
  • 异步迭代器

    我有以下代码 while slowIterator hasNext performLengthTask slowIterator next 由于迭代器和任务都很慢 因此将它们放入单独的线程中是有意义的 这是对迭代器包装器的快速而肮脏的尝试
  • 我想在java中使用XQuery进行Xml处理

    我想用XQuery用于从 java 中的 Xml 获取数据 但我没有得到需要为此添加哪个 Jar 我在谷歌上搜索了很多 但没有得到任何有用的例子 例如我得到以下链接 https docs oracle com database 121 AD
  • 带有 OpenId 提供程序的 Java Spring 安全性

    我有一个 spring MVC 应用程序 另一个客户端应用程序想要使用 open id connect 访问我的 spring 应用程序 如何在服务器端实现开放ID提供商 请帮忙 MITREid 连接 OpenID Connect Java
  • 创建正则表达式匹配数组

    在Java中 我试图将所有正则表达式匹配返回到一个数组 但似乎您只能检查模式是否匹配某些内容 布尔值 如何使用正则表达式匹配来形成与给定字符串中的正则表达式匹配的所有字符串的数组 4城堡的回答 https stackoverflow com
  • 如何在Java媒体框架中学习.wav持续时间?

    我正在尝试使用 java 媒体框架将 mov 文件与 wav 文件合并 因此我需要知道它们的持续时间 我怎样才能做到这一点 任何想法 将不胜感激 您可以使用以下方式了解声音文件的持续时间 即 VitalyVal 的第二种方式 import
  • Hibernate HQL:将对值作为 IN 子句中的参数传递

    我面临一个问题 如何使用 IN 子句将查询中的成对值的参数传递给 HQL 例如 select id name from ABC where id reg date in x y 并且参数是不同的数据类型string id 和reg date
  • Java:由 HTTP 连接创建的等待连接线程存活时间很长

    我有一个服务器端代码 用于检查 SOAP 服务是否已启动 代码如下 String response while response length 0 try final URL url new URL DummySoapServiceURL
  • 如何解决 PDFBox 没有 unicode 映射错误?

    我有一个现有的 PDF 文件 我想使用 python 脚本将其转换为 Excel 文件 目前正在使用PDFBox 但是存在多个类似以下错误 org apache pdfbox pdmodel font PDType0Font toUnico
  • 公共方法与公共 API

    在干净的代码书中 有一个观点是 公共 API 中的 Javadocs 同样 Effective java 一书也有这样的内容 项目 56 为所有公开的 API 元素编写文档注释 所以这就是我的问题 所有公共方法都被视为公共 API 吗 它们
  • 春季 CORS。在允许的来源中添加模式

    查看CORS的弹簧指南 以下代码启用所有允许的来源 public class MyWebMVCConfigurer extends WebMvcConfigurerAdapter Override public void addCorsMa
  • 失败时石英重试

    假设我有一个这样配置的触发器
  • Java:使用 Graph API 在线更新 Sharepoint 上的 docx 文件

    我在使用 Java 在线更新 Sharepoint 上的 docx 文件时遇到问题 首先 我检查了构建 PUT 请求的 URL 此处 并使用此请求 PUT drives drive id items item id content 我首先使

随机推荐

  • 运维人员必须知道的10个系统进程

    前言 在日常运维工作中 经常会看到一些奇怪的系统进程占用资源比较高 但是又不敢随意的Kill这些进程 而这些系统级的内核进程都是会用中括号括起来的 它们会执行一些系统的辅助功能 如将缓存写入磁盘 无括号的进程都是用户们执行的进程 如java
  • python输入位置的坐标(即经纬度),计算两点的距离结果保留两位

    1 可以使用haversine公式 from math import radians sin cos sqrt atan2 def distance lat1 lon1 lat2 lon2 将经纬度转换为弧度 lon1 radians lo
  • Caught exception in launch(see debug for traceback)

    Caught exception in launch see debug for traceback Caught exception when trying to load file of format xml Caught except
  • 【Kotlin】集合操作

    Kotlin 集合操作篇 背景 集合类型 集合操作 加减操作 并集 交集 集合分组
  • 网络安全(黑客)自学秘籍

    想自学网络安全 黑客技术 首先你得了解什么是网络安全 什么是黑客 网络安全可以基于攻击和防御视角来分类 我们经常听到的 红队 渗透测试 等就是研究攻击技术 而 蓝队 安全运营 安全运维 则研究防御技术 无论网络 Web 移动 桌面 云等哪个
  • layui表格table不分页,显示全部数据

    layui表格table不分页 显示全部数据 表格渲染时添加两行代码 page false limit Number MAX VALUE 数据表格默认全部显示 table render elem orderTable id orderTab
  • 【论文阅读笔记】BTS-ST: Swin transformer network for segmentation and classification of multimodality breast

    Iqbal A Sharif M BTS ST Swin transformer network for segmentation and classification of multimodality breast cancer imag
  • C/C++编程中的算法实现技巧与案例分析

    C C 编程语言因其高效 灵活和底层的特性 被广大开发者用于实现各种复杂算法 本文将通过10个具体的算法案例 详细探讨C C 在算法实现中的技巧和应用 一 冒泡排序 Bubble Sort 冒泡排序 Bubble Sort 是一种简单的排序
  • Vue学习之watch侦听器:案例实现翻译功能

    watch侦听器 作用 监视数据的变化 当数据发生变化时 执行一些业务逻辑或者是异步操作 执行的场景例如在线翻译 当文本区域的内容发生变化时 会发生翻译内容的同时更新 语法 简单的写法 简单数据类型 可以直接的进行监听 完整的写法 添加额外
  • 基于动态代理实现接口耗时计算

    对于动态代理模式 Java的反射机制提供了支持 耗时计算写在主逻辑代码存在很强的耦合性 这里提供了一种解耦合的方式去实现 在Spring框架aop也用了这一技术 登录接口 public class UserServiceImpl imple
  • 为什么程序员不拿自己写的程序去卖,而要在公司领死工资呢?

    大多数程序员连和产品经理battle都battle不清楚 更别说是自己做程序 卖程序 赚大钱了 写程序不难 但要摆脱领死工资 通过卖程序实现最基础的养活自己 你起码得有 想出一个还不错的产品 至少要满足 原创非抄袭 有一定的市场且该市场还没
  • scrapy_redis实战去哪儿旅游信息爬虫(分布式爬虫实例)

    前言 在这个信息爆炸的时代 网络上充斥着大量的旅游信息 而其中关于景区的介绍和评论更是琳琅满目 然而 对于想要获取特定景区信息并了解其真实评价的人来说 筛选和获取准确 有用的数据可能是一项极具挑战性的任务 为了解决这一难题 利用网络爬虫技术
  • git 的碎步浪荡,添加仓库子项目,迁移仓库

    1 git仓库迁移 将他人的代码仓库 xxxx 移为自己的 yyyy 仓库 先创建自己的yyyy空仓库 假设url为 yyyy git 将 xxxx 的全部数据 包括分支和 tag 都 download 到本地 git clone recu
  • 【科技前沿】数字孪生技术改革智慧供热,换热站3D可视化引领未来

    换热站作为供热系统不可或缺的一部分 其能源消耗对城市环保至关重要 在双碳目标下 供热企业可通过搭建智慧供热系统 实现供热方式的低碳 高效 智能化 从而减少碳排放和能源浪费 通过应用物联网 大数据等高新技术 对热源 管网等供热系统进行智慧化改
  • 探究微处理器开发中的汇编语言的优势与挑战

    在计算机编程中 汇编语言是一种低级语言 它可以直接控制计算机的硬件资源 与高级语言相比 汇编语言具有更高的运行效率和更好的控制能力 但同时也更加复杂和难以理解和维护 在微处理器开发中 汇编语言通常是首选的语言之一 这是因为微处理器的自然语言
  • 干货丨渗透测试常用方法总结,大神之笔!

    一 渗透流程 信息收集 漏洞验证 漏洞攻击 提权 权限维持 日志清理 信息收集 一般先运行端口扫描和漏洞扫描获取可以利用的漏洞 多利用搜索引擎 端口扫描 有授权的情况下直接使用 nmap masscan 自己写py脚本等端口扫描工具直接获取
  • netty源码:(24)EventExecutorChooserFactory类

    该类定义了一个内部接口EventExecutorChooser 该接口有一个方法 next EventExecutorChooserFactory类有个默认实现类 DefaultEventExecutorChooserFactory 该类有
  • WebRTC编译记录

    文章目录 1 尝试1 重新安装libtool 尝试2 解除brew的libtool 切换到xcode自带的 成功 这里记录一次iOS编译问题 在之前编译WebRTC都是没有问题 今天编译突然报错如下 FAILED obj media lib
  • 【Ubuntu系统常用命令以及英文缩写】

    Ubuntu系统常用命令以及英文缩写 Ubuntu common commands Listing all Ubuntu commands and their explanations would be quite extensive as
  • Java浅拷贝、深拷贝

    浅拷贝 新对象和原对象的成员变量一致 引用变量也指向同一个对象 其中一个对象改变引用变量指向的对象内容 另一个对象中同样的变量也会跟着改变 即对于引用变量 浅拷贝复制的是其地址 并非对象本身 如下 Data public class Use