深拷贝和浅拷贝的理解-----------【Java基础】
拷贝,在IT界是一个计算机系统的DOS命令,意为“复制”,是一个新名词,广泛地应用于IT的各个领域;
拷贝还分深拷贝和浅拷贝;拷贝的对象不同还会导致拷贝方式的不同;拷贝的若是引用数据类型即是引用拷贝,拷贝的是对象的话就是对象拷贝;所以,深拷贝和浅拷贝都是对象拷贝。
浅拷贝,仅仅复制所考虑的对象,而不复制它所引用的对象;深拷贝的话,还需要拷贝它引用的对象;
所以总结的话:
1、浅拷贝:对基本数据类型进行值传递,对引用数据类型进行引用传递般的拷贝,此为浅拷贝。
2、深拷贝:对基本数据类型进行值传递,对引用数据类型,创建一个新的对象,并复制其内容,此为深拷贝。
所以深拷贝就比浅拷贝花费多些时间和内存空间;
总结下,
在使用的过程中的话,浅拷贝和深拷贝只是相对的。
因为如果一个对象内部只有基本数据类型,那用 clone() 方法获取到的就是这个对象的深拷贝,而如果其内部还有引用数据类型,那用 clone() 方法就是一次浅拷贝的操作;
可能clone在平时项目的开发中用的不是很频繁;但是区分深拷贝和浅拷贝的话,会让我们对java内存结构和运行方式有更深的了解;
因为深拷贝和彻底深拷贝,在创建不可变对象时,可能对程序有着微妙的影响,可能会决定我们创建的不可变对象是不是真的不可变。
假设在有指针的情况下,浅拷贝只是增加了一个指针指向已经存在的内存,而深拷贝就是增加一个指针并且申请一个新的内存,使这个增加的指针指向这个新的内存;所以采用深拷贝的情况下,释放内存的时候就不会出现在浅拷贝时重复释放同一内存的错误!修改上也是同理;
所以在编写C++程序中有时用到,操作符的重载。也就最能体现深层拷贝与浅层拷贝的,就是“=”的重载;
深浅拷贝的实现方式有多种,主要有反射和代理实现;具体实现的话,可以参考下:
【Java深入】深拷贝与浅拷贝详解、Java学习之深拷贝浅拷贝及对象拷贝的两种思路、
Java的四种拷贝(和理解“浅拷贝、深拷贝”)、
js深度拷贝(克隆)与浅度拷贝(克隆)原理及应用、
深拷贝与浅拷贝详解:教你区分拷贝原理、
深拷贝和浅拷贝的区别
深拷贝和浅拷贝的理解-----------【Java基础】相关推荐
- 面试官:谈谈你对深拷贝和浅拷贝的理解
在面试的时候,如果面试官问对你说:请谈谈你对深拷贝和浅拷贝的理解,你会怎么回答这个问题呢?可能有很多小伙伴都不太理解深拷贝和浅拷贝的含义和区别,那么今天就和各位小伙伴分享一下我对二者的理解
- 深拷贝与浅拷贝深入理解
1. 什么是深拷贝?什么是浅拷贝? 不管是深拷贝还是浅拷贝,都是针对引用类型的.通俗的理解就是,深拷贝得到的对象不会受被拷贝对象影响,浅拷贝得到的对象与被拷贝对象之间相互影响. 2. 深拷贝的实现 方 ...
- 深拷贝和浅拷贝的理解与应用
对象拷贝就是将一个对象的属性拷贝到另一个有着相同类型的对象中去.java中有两种类型的对象拷贝:深拷贝.浅拷贝. 假如我们要复制一对基本数据类型变量到另外一个具有相同的类型的基本变量时,我们一般会这样 ...
- python深拷贝和浅拷贝的使用场景_深拷贝、浅拷贝的理解与使用场景
什么是深拷贝.浅拷贝? 通俗解释:深拷贝是内容拷贝,浅拷贝是地址拷贝 区别点: 深拷贝会创建一个新的内存空间,拷贝的值是一样的,但是内存地址不一样. 浅拷贝只是拷贝指向原来对象的地址,使原对象的引用计 ...
- 深拷贝和浅拷贝的理解
深拷贝和浅拷贝就是指对象的拷贝,一个对象中存在两种类型的属性,一种是基本数据类型,一种是实例对象的引用. 1.浅拷贝是指,只会拷贝基本数据类型的值,以及实例对象的引用地址,并不会复制一份引用地址所指向 ...
- 浅谈对java深拷贝与浅拷贝的理解
java中什么是浅拷贝?什么是深拷贝? 1.拷贝:实现对象复制的方式. 2.浅拷贝:被复制的对象的所有变量都含有原来对象相同的值,而所有的对其他对象的引用仍然指向原来的对象.换言之, 浅拷贝仅仅复制所 ...
- Java 深入理解深拷贝和浅拷贝区别
title: Java 深入理解深拷贝和浅拷贝区别 date: 2021-6-19 updated: 2021-6-19 tags: Java 深拷贝和浅拷贝 categories: 面试 Java ...
- 对深拷贝与浅拷贝的再次理解
对深拷贝与浅拷贝的再次理解 记得11年底找工作的时候,面试时曾经遇到有面试官问的对深拷贝与浅拷贝的理解,那时候自己回来查了资料,写了篇博客,感觉自己理解了,其实理解的不深刻,最近在调试bug的时候,再 ...
- 字节面试官推荐的一份 Java 基础面试题!太顶了
Java 基础篇 Java 有哪些特点 并发性的: 你可以在其中执行许多语句,而不必一次执行它 面向对象的:基于类和面向对象的编程语言. 独立性的: 支持一次编写,到处运行的独立编程语言,即编译后的代 ...
最新文章
- JS 中settimeout和setinterval函数的区别
- jSearch(聚搜) v0.5.0 发布,多项更新和体验优化
- CHIL-SQL-FIRST() 函数
- start ssh-agent
- Android --- 拍照上传图片之后,发现图片是全黑色,什么内容也没有
- pve安装黑群晖直通硬盘_PVE+lede+DSM网卡硬盘直通+win10
- MyBatis框架 拦截器简单使用
- ctf 监听端口_从一道ctf题目学到的绕过长度执行命令姿势 - 华域联盟|chu
- 疫情严峻,被迫在家办公
- 用于专利申请的创新提案模板
- 重磅来袭,机器人四大家族财务报表大揭秘
- Java 项目开发流程
- 钉钉微应用H5的调试方法
- 计算机excel操作知识点汇总,【计算机二级之Excel】考点汇总
- 第七周--项目1-静态成员应用
- nginx反向代理到第三方服务商的服务器
- 2.1 Java范型
- LenNet5-MNIST
- karas 实现lstm 文本分类
- P4315 月下“毛景树” (树链剖分)