每日面试题之介绍一下克隆!

news/2024/10/20 16:05:49/

克隆的两种方式:

在Java中存在两种克隆方式:

深克隆:是指通过实现Serialzable接口,该种克隆方式不仅克隆对象本身,还克隆对象包含的引用所指向的所有对象。

浅克隆:是指通过实现Cloneable接口,该种克隆方式只克隆对象本身,不克隆对象中的引用指向的对象。

为什么需要使用克隆?

在java中,如果我们想对一个对象进行复制,而且还想保留原有的对象去进行接下来的操作,此时就需要克隆!

实现克隆的方法:

在java中:

对于深克隆的实现,我们先实现Serializable接口,再通过对象的序列化和反序列化实现深克隆

对于浅克隆的实现,我们通过实现Cloneable接口,与深克隆需要实现的Serializable接口一样,该接口中也不包含任何方法,但区别在于,浅克隆的实现还需要重写Object中的clone()方法

此外,BeanUtils,apache和Spring都提供了bean工具,只是这都是浅克隆。

深克隆与浅克隆的区别:

虽然深克隆和浅克隆都是用来创建对象副本的方式,但它们之间存在着重要的区别:

1:浅克隆只复制对象的引用,不复制对象本身,而深克隆则将整个对象以及对象引用的对象全部复制。

2:浅克隆创建的对象与原始对象共享内部对象对新对象的修改可能会影响到原始对象,而深克隆创建的对象与原始对象完全独立,对新对象的修改不会影响到原始对象。

3:浅克隆通常比深克隆更快,因为它不需要复制整个对象树。但是,如果对象树很大或者包含循环引用,浅克隆可能会导致性能问题或者无限循环。

深克隆与浅克隆如何选择?

需要创建一个与原始对象完全独立的副本时应该使用深克隆,而当只需要在对象之间共享一些内部对象或者需要快速创建对象副本时可以使用浅克隆

对于二者我们更推荐使用序列化和反序列化实现克隆,因为基于序列化和反序列化实现的克隆不仅仅是深度克隆,更重要的是通过泛型限定,可以检查出要克隆的对象是否支持序列化,这项检查是编译器完成的,不是在运行时抛出异常,这种方案明显优于使用Object类的clone方法克隆对象,让问题在编译的时候暴露出来总好过把问题留到运行时。

最后补充一下有关泛型限定的知识!

泛型限定:

泛型限定是指在泛型中对类型参数进行限制以确保类型参数满足某些特定条件

限定可以是类、接口或类和接口的组合

在Java中,泛型限定使用 extends 关键字

如果要限定某个泛型类型参数必须是某个类或其子类,可以使用 extends 关键字,例如:

//这表示泛型类型参数 T 必须是 Number 类或其子类。
class MyClass<T extends Number> {... }

如果要限定泛型类型参数必须实现某个接口,可以使用 extends 关键字,例如:

//这表示泛型类型参数 T 必须实现 Comparable 接口。
class MyClass<T extends Comparable<T>> { 
... 
}

如果要同时限定泛型类型参数必须是某个类或其子类以及实现某个接口,可以使用 extends 关键字,例如:

//这表示泛型类型参数 T 必须是 Number 类或其子类,并且实现 Comparable 接口。
class MyClass<T extends Number & Comparable<T>> {...}

http://www.ppmy.cn/news/262237.html

相关文章

Linux压缩与解压【tar】

文章目录 压缩和解压缩gzipbzip2tar【常用】 压缩和解压缩 gzip gzip 的常用选项&#xff1a; -l(list) 列出压缩文件的内容。-k(keep) 在压缩或解压时&#xff0c;保留输入文件。-d(decompress) 将压缩文件进行解压缩。 注意&#xff1a; 如果 gzip 不加任何选项&#xf…

C++轻量级跨平台桌面GUI库FLTK的简单使用

C的跨平台桌面GUI库有很多&#xff0c;大体上分成两种流派&#xff1a;retained mode和retained mode。 其中前者是主流的桌面GUI机制框架&#xff0c;包括&#xff1a;Qt、wxwidgets、gtk、juce等后者是一些游戏引擎编辑器常用的GUI机制框架&#xff0c;包括&#xff1a;imgu…

Ibatis与Mybatis的区别—侧重于Ibatis

目录 一、什么是Ibatis&#xff1f; 1、iBatis是一款轻量级的持久化框架 2、iBatis最大的特点是将SQL语句与Java代码分离 3、iBatis具有以下几个关键组成部分&#xff1a; 二、Ibatis与Mybatis的区别 1、基本信息不同 2、开发时间不同 3、配置方法不同 三、Ibatis与My…

< 每日算法:一文带你认识 “ 双指针算法 ” >

每日算法&#xff1a;初识双指针算法 &#x1f449; 1. 双指针概念&#xff1a;&#x1f449; 2. 左右指针> 案例一&#xff1a;二分查找> 案例二&#xff1a;双指针 - 移除元素 &#x1f449; 3. 快慢指针> 案例一&#xff1a; 删除排序数组中的重复项 &#x1f449;…

实验篇(7.2) 05. 通过浏览器访问远端内网服务器 (FortiClient-SSL) ❀ 远程访问

【简介】直接将内网服务器映射成公网IP&#xff0c;可以方便的从任何地方访问服务器的指定端口&#xff0c;但是这种方式下&#xff0c;服务器是公开且暴露的。那有没有即方便、又比较安全的远程访问服务器的方法呢&#xff1f;我们来看看SSL VPN的Web模式。 SSL VPN介绍 从概念…

北邮22信通:实验七 三角波-方波(锯齿波-矩形波)发生器实验报告(着急验收的同学先看看,后续细节正在赶来中)

北邮22信通一枚~ 持续更新模电实验讲解 关注作者&#xff0c;解锁更多邮苑模电实验报告~ 获取更多文章&#xff0c;请访问专栏&#xff1a; 北邮22信通——电子电路_青山如墨雨如画的博客-CSDN博客 实验七 三角波-方波&#xff08;锯齿波-矩形波&#xff09;发生器实验…

Python基础语法入门教程

Python是一种通用的编程语言&#xff0c;非常适合初学者入门&#xff0c;以下是Python基础语法的教程&#xff0c;内容包括变量、数据类型、运算符、流程控制、函数等。 变量 Python中的变量不需要预先声明类型&#xff0c;可以直接赋值。例如&#xff1a; x 5 y "He…

API管理工具介绍——Apifox使用详解

目录 如何优雅地进行API管理 最终的解决方案 此外 敏捷迭代和团队协作&#xff0c;前后端分离的工作模式几乎是每个互联网公司的常规工作模式。 前后端分离&#xff0c;各自开发的优点很多&#xff0c;其中一项是它只需要提供一个统一的API接口&#xff0c;即可被web&#…