关于Java深度克隆和浅度克隆的简单说明

Java提高篇——对象克隆(复制) 假如说你想复制一个简单变量。很简单: int apples = 5; int pears = apples; 不仅仅是int类型,其它七种原始数据类型(boolean,char,byte,short,float,double.long)同样适用于该类情况。 但是如果你复制的是一个对象,情况就有些复杂了。 假设说我是一个beginner,我会这样写: class St... 阅读详情

这个问题一个月之前就想写一下的一直拖到现在囧~~
问题的来源是我在做一次笔试题的时候遇到的这个问题,当时就有点mengbi了…… 后来研究了一下 也给还不知道的同学借鉴一下。

进入正题:

UserInfo user1 = new UserInfo(“漫步”,22);
UserInfo user2 = user1;

这样 user2和user1就指向了同一个UserInfo对象,但是这样带来的问题就是,当你操作user1或者user2的时候都会给对方造成影响。这个时候就可以使用“克隆”:

UserInfo user2 = user.clone();

这样user2就指向了一个新的UserInfo对象,且数据成员和user1相同。到这里 叫做“浅度克隆”
但是新的问题又出现了,clone()只是针对基本数据类型,对于引用类型 比如日期Date还是简单的将对象指过去。所以我们需要进行“深度克隆”:

 public class UserInfo implements Cloneable{
    public Object clone() throws CloneNotSupportedException  {
        UserInfo clonedUser = (UserInfo) super.clone();
        clonedUser.date = (Date) date.clone();//date是数据成员
        return clonedUser;
    }
 }

这样我们在再进行:

UserInfo user2 = user1.clone();

就不会有问题了。
这就是深度克隆。

嗯……说的有点肤浅,但是大家能看懂就好了。 想要更加详细的了解的可以去大神们的博文看看,只是了解一下的话 我写的就够了。

解析JAVA深度克隆与浅度克隆的区别详解 本篇文章是对JAVA深度克隆与浅度克隆的区别进行了详细的分析介绍,需要的朋友参考下 立即下载

相关推荐

Ubuntu20.04下 嵌入式 Qt 开发环境的搭建(适用于Tiny6410)

Ubuntu 下 Tiny6410 嵌入式 Qt 开发环境的搭建 目录导航Ubuntu 下 Tiny6410 嵌入式 Qt 开发环境的搭建前言1.安装前的准备工作2.安装交叉编译器 前言 这篇文章,主要是基于 Ubuntu19.10版本而写,写此文的初衷,是为了自己使用,因为最近正在以Tiny6410板子做实训,所以也是初学者一枚,只能保证我遇上的问题统统能够解决掉,至于一些没遇上的,欢迎各位看客给我留言,大家一起讨论,一起解决。 注:本文会持续更新 1.安装前的准备工作 环境要求 Linux系统:U

繁臻的小窝 4894

Java深克隆的几种方式

Serializable接口、Cloneable接口、序列化、字节流。

weixin_37672801的博客 6030

高德地图可视化入门:零基础用Python+高德API打造你的第一个热力图

本文详细介绍了如何使用Python和高德地图API从零构建商业级热力图。通过环境配置、地理编码、数据清洗到最终可视化展示的全流程指南,帮助开发者快速掌握地图可视化技术,特别适合展示商圈人流、疫情热点等地理分布数据。

weixin_29053067的博客 302

Java对象深拷贝的几种方式

java对象拷贝的几种方式

penn 8832

VLA强化学习训练:π0到π0.5的技术优化与实现

视觉语言动作模型(VLA)作为多模态强化学习的重要分支,通过融合视觉、语言和环境状态数据实现智能决策。其核心技术在于多模态特征融合与动作空间设计,其中PPO算法因其出色的训练稳定性成为首选方案。在工程实践中,延迟补偿机制和课程学习设计能显著提升模型性能,如在四足机器人项目中使避障成功率提升47%。针对实际部署中的性能下降问题,需要特别关注硬件量化参数和控制频率一致性等关键因素。本文通过π0与π0.5版本的对比实验,详细解析了VLA模型在机械臂控制等具身智能场景中的优化路径。

weixin_29041767的博客 246

RFC 字符码转换深度解析:Unicode、非 Unicode 与 MDMP 系统的协奏

老版本 MDMP 系统不上传自定义映射时,Unicode 端会落回“预配置列表”。列表里可见西欧 1100、日文 8000、中文 8400 等经典编号。若需强制覆写映射,可在 SM59 ➡Unicode页签启用,或直接勾选作为兜底。字符编码问题常“潜伏”多年,一旦旧系统升级或新增语种便集中爆发。掌握 RFC code page 转换机理、灵活运用 SM59 选项、在早期对 LANG 字段和字段长度进行治理,是根治乱码与 short dump 的关键。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 222

渐析java的浅拷贝和深拷贝

转自:http://www.cnblogs.com/chenssy/p/3308489.html 首先来看看浅拷贝和深拷贝的定义:       浅拷贝:使用一个已知实例对新创建实例的成员变量逐个赋值,这个方式被称为浅拷贝。       深拷贝:当一个类的拷贝构造方法,不仅要复制对象的所有非引用成员变量值,还要为引用类型的成员变量创建新的实例,并且初始化为形式参数实例值。这个方式称为深拷

hexi_sijin的专栏 550

智能车图像处理1-基础图像规格

从厂家摄像头的库函数中,我们可以直接得到完整图像的灰度数组,经过二值化之后(算力允许,可以考虑大津法),就是我们要处理的0-1二值图像了。本系列所有的文章中,我们的图像规格如下。

taiyuezyh的博客 4318

Java对象克隆-浅拷贝与深拷贝

JDK API的说明文档解释这个方法将返回Object对象的一个拷贝。要说明的有两点:一是拷贝对象返回的是一个新对象,而不是一个引用。二是拷贝对象与用new操作符返回的新对象的区别就是这个拷贝已经包含了一些原来对象的信息,而不是对象的初始信息。在实际编程过程中,我们常常要遇到这种情况:有一个对象A,在某一时刻A中已经包含了一些有效值,此时可能会需要一个和A完全相同新对象B,并且此后对B任何改动都不会影响到A中的值,也就是说,A与B是两个独立的对象,但B的初始值是由A对象确定的。克隆的是两个不同的对象。

棉花糖老丫 1719

windows下使用Nginx搭建Rtmp流媒体服务器,实现视频直播功能

一、环境介绍 操作系统:win10 64位系统 Linux下搭建Nginx搭建Rtmp流媒体服务器方法请看这里:https://blog.youkuaiyun.com/xiaolong1126626497/article/details/105378894 二、流媒体服务器介绍 流媒体服务器的主要功能是以流式协议(RTP/RTSP、MMS、RTMP等)将视频文件传输到客户端,供用户在线观看;也可从视频采集、压缩软件接收实时视频流,再以流式协议直播给客户端。 nginx服务器是开源的高性能的http服务器,反向

1万+

SiC MOSFET 失效机制详解

TDDB 指在相对较低电场(通常接近或略高于器件工作电压)下,长时间施加电压导致介电层(如栅氧化物)逐渐退化并最终击穿的现象。与即时击穿(Immediate Breakdown,由强电场直接引起)不同,TDDB 是时间相关的渐进过程,通常发生在数小时、几天甚至数年之后。核心过程:在 MOSFET 中,栅极与衬底之间施加电压时,电子通过量子隧道效应(Tunneling)注入介电层,形成缺陷或陷阱。这些缺陷积累,最终在介电层中形成导电路径(Conductive Path),导致短路和器件失效。统计特性。

专注于前沿技术的探索与实践,热衷于从代码逻辑、架构设计到行业应用等多维度深挖技术本质。期待在技术之路上与你共同成长~ 381

Cloneable接口的作用与深入理解深度克隆与浅度克隆

cloneable接口的作用 cloneable其实就是一个标记接口,只有实现这个接口后,然后在类中重写Object中的clone方法,然后通过类调用clone方法才能克隆成功,如果不实现这个接口,则会抛出CloneNotSupportedException(克隆不被支持)异常。Object中clone方法: 这里有一个疑问,Object中的clone方法是一个空的方法,那么他是如何判断类...

qq_37113604的博客 5万+

OpenClaw 子代理配对失败问题分析与解决方案

OpenClaw子代理配对失败问题分析与解决方案 问题核心在于agent设备权限不足,仅有operator.approvals权限而缺少operator.admin权限,导致子代理启动时形成权限死锁。本文提供三种解决方案: 直接编辑设备配对文件(推荐):修改本地JSON文件,为agent设备添加完整operator.admin权限,操作简单快捷。 标准重新配对流程:删除现有agent设备后重新配对,通过正常审批流程获取完整权限,符合系统安全设计。 修改源码降低权限要求(仅限开发环境):调整子代理代码避免强制

多媒体编程、网络编程、系统编程、网络安全编程、驱动编程 148

啥是对象的浅度克隆和深度克隆?

深度克隆 or 浅度克隆

果子爸聊技术 1万+

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

浅度克隆和深度克隆

优快云-markdown编辑器 使用示例 目录 用 [TOC]来生成目录: 文章目录优快云-markdown编辑器 使用示例目录快捷键Markdown及扩展表格定义列表代码块自定义字体颜色(github中看不到颜色):删除线数学公式UML 图:离线写博客浏览器兼容在csdn Markdown模式下的显示效果: 本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体...

hyly_zhard的博客 645

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Java中深度克隆和浅度克隆

在Java中克隆分为两种:深度克隆和浅度克隆 浅度克隆: 浅度克隆完全复制一个对象,但对其内部的引用数据类型,浅度克隆只会复制该对象的引用,因此如果修改被克隆的对象,会影响到原对象。 实现方式 1.被克隆的对象实现Cloneable接口, 2.让克隆的类重写Object的clone()方法 深度克隆 深度克隆完全复制一个对象,包括原对象的引用数据类型也会复制并额外开辟空间去存储数据,独立于原对象,修改克隆出来的对象不会影响原对象。 -实现方式 常用的是使用序列化实现深度克隆(比较常用,使用起来较

Vicali的博客 329

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

java的深度克隆和浅度克隆

 说到克隆,其实是个比较简单的概念,跟现实生活正的克隆一样,复制一个一模一样的对象出来。clone()这个方法是从Object继承下来的,一个对象要实现克隆,需要实现一个叫做Cloneable的接口,这个接口没有什么方法,和Comparable接口差不多,仅仅是起一个标志作用,实现了这个接口你就能实现克隆操作。   这里有两个概念,深度克隆和浅度克隆,这东西虽然平常不怎么用,但是了解一下还是有必...

jswd_50x的博客 2649

浅谈java对象浅度克隆和深度克隆

浅谈java对象浅度克隆和深度克隆标签(空格分隔): 浅度克隆 深度克隆个人博客:www.letus179.com需要克隆的原因在工作中我们有时会遇到这样的需求: A对象包含一些有用信息,这时候需要一个和A完全相同的B对象。拿到B对象后,只需要稍微调整下就ok。A和B是两个独立的对象,只是B的初始值来自于A。而A/B对象中包含了比较复杂的数据结构。此时通过简单的赋值,并不能满足这种需求。 我之

kingyxfly的博客 812

Cloneable接口与深度克隆、浅度克隆

Cloneable接口 我们知道。想要实现对象克隆,重写并调用Object的clone方法就可以实现对象克隆,但是我们发现,如果单单只重写clone方法并调用,会抛出CloneNotSupportedException(克隆不被支持)的异常。Cloneable接口可以看做是一个标记,所以我们必须在实现Cloneable接口的基础上,重写并调用Object的clone方法才能准确实现对象克隆。 O...

qq_42270665的博客 313

java浅度克隆_java对象 深度克隆(不实现Cloneable接口)和浅度克隆

为什么需要克隆:在实际编程过程中,我们常常要遇到这种情况:有一个对象A,在某一时刻A中已经包含了一些有效值,此时可能会需要一个和A完全相同新对象B,并且此后对B任何改动都不会影响到A中的值,也就是说,A与B是两个独立的对象,但B的初始值是由A对象确定的。在Java语言中,用简单的赋值语句是不能满足这种需求的,要满足这种需求有很多途径。克隆的实现方式一、浅度克隆对于要克隆的对象,对于其基本数据类型的...

weixin_42682925的博客 253

深度克隆与浅度克隆

javascript中对象的深度克隆 深度克隆:原不变 浅克隆:通过“=”赋值操作;基础类型:值传递;对象:引用。 以下number function string 执行的浅克隆(赋值操作),但是结果表现形式与深度克隆一致,都是原不变,相当于深克隆。 浅==深 对于基础类型可以理解赋值操作原来的不变,但是function作为引用,原也不变,是因为,函数的克隆会在内存单独开辟空间,互不影

lulalahappy123的专栏 1105

Cloneable和clone的使用,深入理解深度克隆与浅度克隆(二)

cloneable接口的作用 cloneable其实就是一个标记接口,只有实现这个接口后,然后在类中重写Object中的clone方法,然后通过类调用clone方法才能克隆成功,如果不实现这个接口,则会抛出CloneNotSupportedException(克隆不被支持)异常。Object中clone方法: 这里有一个疑问,Object中的clone方法是一个空的方法,那么他是如何判断类...

AlbenXie的博客 644
上一篇: 常用git命令
下一篇: Android自定义搜索效果的实现
Z漫步
博客等级 码龄12年 42粉丝 80原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值