首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Java中的深克隆和浅克隆

简单说, 深克隆不仅克隆了当前对象, 还把当前对象所引用的对象都复制了一遍. Object中的clone Object类中的clone()方法属于浅克隆....Java中实现浅克隆 java中实现clone要实现 Cloneable 接口, 该接口十分简单, 源码如下: ? 仅仅起到一个标识的作用. 下面是一个实现浅克隆的例子: ?...可以看到, 对象确实不是原来的对象了, 但是其中的引用对象却还是原来的对象. 浅克隆对于引用对象仅拷贝引用. 如果一个对象只包含原始数据或者不可变对象域(如: String), 推荐使用浅克隆....Java序列化克隆 如果引用类型中海包括引用类型, 要实现多层克隆会很麻烦, 这使用可以使用序列化和反序列化的方式实现对象的深克隆....由于Java序列化的过程中, 写在流中的是对象的一个拷贝, 而原对象仍然在JVM中, 所以可以利用这个原理来实现对对象的深克隆. 上面代码使用序列化实现如下: ?

1.7K10
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    JAVA中的浅克隆和深克隆分析

    无论是在java面试过程中,还是在与各种老鸟交流的过程中,对java对象的深浅拷贝,都是一个绕不开的问题,这个问题看似很容易,却是大多数人用来区分小白的标准问题。现在对该问题进行说明。...1.定义 浅克隆(拷贝):复制一个对象的实例,但是这个对象中包含的其它的对象还是共用的。一般用super.clone()方法,clone的对象就是浅克隆。...深克隆(拷贝):复制一个对象的实例,而且这个对象中包含的其它的对象也要复制一份。...如果使用clone(),那么需要对clone方法进行重写,复制一个对象super.clone(),之后再一一对属性进行复制。这样显得非常冗余,幸好,在java中还可以通过流来实现。...当然,实现深克隆的方法并不局限于流这一种办法,还可以通过json等其他办法实现。

    87120

    探究Java中的克隆

    克隆,想必大家都有耳闻,世界上第一只克隆羊多莉就是利用细胞核移植技术将哺乳动物的成年体细胞培育出新个体,甚为神奇。其实在Java中也存在克隆的概念,即实现对象的复制。...本文将尝试介绍一些关于Java中的克隆和一些深入的问题,希望可以帮助大家更好地了解克隆。...Clone 在Java中,clone是将已有对象在内存中复制出另一个与之相同的对象的过程。java中的克隆为逐域复制。...,效率更低 为什么使用克隆 很重要并且常见的常见就是:某个API需要提供一个List集合,但是又不希望调用者的修改影响到自身的变化,因此需要克隆一份对象,以此达到数据隔离的目的。...3.可变对象final域 在克隆方法中,如果我们需要对可变对象的final域也进行拷贝,由于final的限制,所以实际上是无法编译通过的。

    51920

    使用 Bitbucket 流水线创建最简单的 CI

    在我印象中我参与开发的所有项目使用的源码控制平台都是使用的 Artlassian 的 Bitbucket。...配置部署脚本 最终的步骤里,我们调用 npm run deploy,它是在我们的 package.json 中定义的,使用下面命令运行一个 JavaScript 文件: node tools/deploy.js...配置对象里面包括创建一个 FTP 连接所需要的所有字段。为了避免在代码中存储凭据,我们从环境变量中传递这些值。这些变量从 Bitbucket 中获取。...这里印证了我为什么在例子中返回上一级目录使用的是 /../。 另一方面,remoteRoot 指向了 FTP 服务器的一个目录。最后,使用 include 我们可以定义哪些文件需要拷贝。...你会注意到开始的一个新的构建名称是我们在 bitbucket-pipelines.yml 文件中事先定义好的。

    2.2K31

    使用简单的python http服务共享文件

    准备工作 所需器材:一台安装好Python的电脑(mac 和windows均可),一台移动设备,如手机或者ipad 1.开启HTTP服务 打开终端,进入到需要发送的文件所在目录,此处要发送的文件是test.csv...需要发送的文件及所在路径 运行命令‘python -m SimpleHTTPServer 8000’ 开启HTTP服务。其中8000是端口号,可以换成别的,开启后,状态如下: ? 2....记下此地址,后续会使用到。 ? 3....用手机连接HTTP服务 打开手机或者ipad,在浏览器中输入地址:http://刚才记录的ip地址:8000(开启服务的端口号),在浏览器中就可以看到test.csv文件了。点击文件,即可进行下载。...这样就实现了将文件从电脑传到手机。截图如下: ? ? 点击文件可以直接进行下载 4. 总结 我们用Python开启了HTTP服务,并通过手机访问该服务实现了文件传输。

    1.3K10

    Java学习【接口的使用实例,浅克隆与深克隆】

    是整型,可以相减,那如果是String 类型呢 可以看出,Java中的String类也实现了Comparable接口,同时也重写了compareTo方法 那么我们只需要调用就可以了 @Override...虽然Person类里面没有clone方法,但是Object类里面有,每一个类都默认继承与Object类,但此时还是报错了,这就需要在Person类中重写clone方法 @Override...原因是,自定义类型想要进行克隆还要实现Cloneable接口 点进源码发现Cloneable接口没有写任何方法,是一个空接口,空接口也叫做标记接口,表示当前类是可以被克隆的 之后还要处理一下异常...,创建person2,把克隆出的数据赋值给person2 浅拷贝 在原来的基础上再加上一个Money类,此时再对克隆后的值进行修改 可以看出,当把person1的money修改之后,两个是都会发生改变的...,这种就叫做浅拷贝 此时就是只克隆了Person的对象,没有克隆Money的对象 深拷贝 如果想要Money也进行克隆,就需要实现Cloneable接口,同时重写clone方法 class Money

    9610

    盘点HTTP爬虫ip使用中的误区

    网络冒险家们,你们是否曾经尝试使用HTTP爬虫ip,并遇到了一些问题?别担心!今天,我将与你们分享使用HTTP爬虫ip过程中的一些常见误区,帮助你们更好地理解和应用爬虫ip。...所以,明智地选择一个可信赖且实力强大的HTTP爬虫ip供应商,将给你带来更好的使用体验。误区二:不了解代理服务器位置和速度在选择HTTP爬虫ip时,代理服务器的位置和速度是需要考虑的关键因素。...如果你的目标是突破地理限制,访问特定国家或地区的网站,那么选择位于目标地区的代理服务器将是最佳选择。此外,对于速度要求较高的任务(如视频流媒体或大文件下载),选择速度较快的代理服务器是必不可少的。...误区三:错误地配置代理设置正确配置代理设置是使用HTTP爬虫ip的基本步骤。而在这一步骤中,很容易出现错误。...希望本文对你们使用HTTP爬虫ip中的运用和选择方面能够有所启示。如果你有任何关于HTTP爬虫ip的问题或分享,欢迎在评论区与我们交流。祝你在网络世界中畅通无阻!

    13820

    CentOS中将备份文件同步到BitBucket、GitHub和Coding的shell脚本

    在上一篇文章讲述了如何在Linux系统中配置BitBucket、GitHub和Coding这三个平台的git账户,这篇文章就分享如何通过shell脚本定时获取自己的CentOS7.1服务器上的备份文件,...然后使用git命令同步到这三个平台仓库上。...1 功能需求描述 我自己为这个shell同步脚本设定了以下三个需求功能点: 1、自动获取数据库备份目和程序备份目录下自动生成的最新的备份文件; 2、将获取到的最新的备份数据库和程序文件自动同步到BitBucket...2 shell脚本的思路和流程 根据上面的需求,整理出脚本思路:先获取最新的备份文件,然后复制到本地的BitBucket、GitHub和Coding仓库目录下,然后通过Git命令同步到远端仓库即可,整个过程执行的命令以追加的方式保存到同一个日志文件中...,然后再将本地仓库更新的备份文件同步到远端仓库中。

    13310

    使用KVM克隆用于Oracle DB的主机

    首先,通过现有的vm1「在上篇文章 使用KVM创建OEL虚拟机 已创建」克隆出一个vm,名字叫做db1,然后修改一些配置,使其更适用于Oracle DB的主机。...1.通过克隆vm1生成db1 2.解决virsh console db1 卡住问题 3.修改配置 CPU、内存、磁盘大小 4.配置局域网yum源 1.通过克隆vm1生成db1 克隆一个VM,以vm1为模版克隆...8dfb-1a3bd7e5b04f OS 类型: hvm 状态: running CPU: 2 CPU 时间: 184.7s 最大内存: 2097152 KiB 使用的内存...:s0:c532,c921 (enforcing) 下面开始修改: 1)先创建一个100GB的文件: # dd if=/dev/zero of=/flash/vm-images/db1-lun1.img...8dfb-1a3bd7e5b04f OS 类型: hvm 状态: running CPU: 4 CPU 时间: 30.1s 最大内存: 16777216 KiB 使用的内存

    73730

    HTTP系列之:HTTP中的cookies

    通过在cookies中存储一些有用的数据,可以将无状态的HTTP协议变成有状态的session连接,或者用来保存登录的权限,下次不用密码即可登陆,非常有用。...在很久很久以前,还没有现代浏览器的时候,客户端的唯一存储就是cookies,所以cookies也作为客户端存储来使用的,但是有了现代的浏览器之后,一般是建议把客户端存储的数据放到其他存储方式中。...中定义的header,Max-Age是HTTP1.1中定义的header。...如果cookies中带有Secure属性,那么cookies只会在使用HTTPS协议的时候发送给服务器。如果使用的是HTTP协议,则不会发送cookies信息。...总结 使用cookies可以辅助我们做很多事情,但是也要注意cookies的安全性。 本文已收录于 http://www.flydean.com/05-http-cookie/

    96520

    HTTP系列之:HTTP中的cookies

    通过在cookies中存储一些有用的数据,可以将无状态的HTTP协议变成有状态的session连接,或者用来保存登录的权限,下次不用密码即可登陆,非常有用。...一般来说,cookies用在三个方面: session的管理,用来保存登录状态,从而让HTTP请求可以带上状态信息。 用户自定义的设置,这些用户特殊的字段,需要保存在cookies中。...在很久很久以前,还没有现代浏览器的时候,客户端的唯一存储就是cookies,所以cookies也作为客户端存储来使用的,但是有了现代的浏览器之后,一般是建议把客户端存储的数据放到其他存储方式中。...中定义的header,Max-Age是HTTP1.1中定义的header。...如果cookies中带有Secure属性,那么cookies只会在使用HTTPS协议的时候发送给服务器。如果使用的是HTTP协议,则不会发送cookies信息。

    75800

    使用.NET8中的.http文件和终结点资源管理器

    本文将以.NET8的模板增加的.http文件为引,介绍 Visual Studio 2022 中的 .http 文件编辑器,这是一个用于测试 ASP.NET Core 项目的强大工具。 1....背景 在.NET8 新的 Web API 项目模板中增加一个新的文件,该文件以“项目名.http”命名。...在这些工具中,用户可以查看请求/响应的详细信息,例如方法、URL、头部和正文等。 2.2 .http 文件语法 创建 .http 文件时,需要遵循一定的语法规则。...我们使用前面定义的变量构建请求 URL 并设置请求头。 这个 .http 文件示例展示了如何在一个文件中组织多个请求,使用变量以及设置请求头和请求体。 3....关于 .http 更多的信息可以参阅:《使用 Visual Studio 2022 中的 .http 文件》[2]。

    93410

    使用 Go 语言完成 HTTP 文件上传与下载

    在接下来的几篇文章中,我将重点讨论我在 Go 中编写生产级 Web 应用程序时遇到的一些问题,特别是关于身份验证/授权的问题。 这篇文章将展示HTTP文件上传和下载的基本示例。...注意这里,整个文件服务的概念是如此的简单 —— 我们仅使用标准库中的工具,使用 http.FileServe 创建一个 HTTP 处理程序,它将使用 http.Dir(uploadPath) 提供的目录来上传文件..., r *http.Request) { 然后,我们使用 http.MaxBytesReader 验证文件大小,当文件大小大于设定值时它将返回一个错误。...在本例中,为了清晰起见,我们不使用花哨的 io.Reader 和 io.Writer 接口,我们只是简单的将文件读取到一个字节数组中,这点我们后面会写到。...在接下来的篇幅中,我将展示一些在我第一次使用 Go 语言编写正式的 web 应用中其他细节,敬请期待。;)

    4.4K120
    领券