测试开发面试--java--深拷贝和浅拷贝

本文详细介绍了Java中深拷贝和浅拷贝的概念,区别在于深拷贝创建新对象并复制引用数据类型的内容,而浅拷贝仅复制引用。讨论了赋值与浅拷贝的差异,以及它们对基本数据类型和引用数据类型的影响。同时,文章还探讨了不可变对象在Java中的应用。

1、基本数据类型和引用数据类型

聊深拷贝和浅拷贝之前先来看看基本数据类型和引用数据类型:

java的基本数据类型有8种:byte、short、int、long、float、double、boolean、char

其余的类、 接口类型、 数组类型、 枚举类型、 注解类型、 字符串型等非基本数据类型都是引用数据类型

详细内容参考:Java中的基本数据类型和引用数据类型的区别 - MaskWolf - 博客园一、数据类型 Java中的数据类型分为两大类,基本数据类型和引用数据类型。 1、基本数据类型 基本数据类型只有8种,可按照如下分类 ①整数类型:long、int、short、byte ②浮点类型:flhttps://www.cnblogs.com/maskwolf/p/9972982.html

2、数据的内存位置

基本数据类型:直接存储在栈中;

引用数据类型:在栈中存储的是对象的引用,真实的数据存放在堆内存里;

详细内容参考:

基本数据类型和对象的区别 - 千里之外kb - 博客园(1) 基本数据类型的存储原理:所有的简单数据类型不存在“引用”的概念,基本数据类型都是直接存储在内存中的栈上的,数据本身的值就是存储在栈空间里面,Java语言里面八种数据类型是这种存储模型; (2)https://www.cnblogs.com/wskb/p/10970761.html

3、深拷贝和浅拷贝

深拷贝和浅拷贝是只针对Object和Array这样的引用数据类型的。

深拷贝:产生一个新对象。对原对象的基本数据类型进行值传递;原对象的引用数据类型创建一个新的对象,并复制其内容,两个引用指向两个对象,但对象内容相同

浅拷贝:产生一个新对象,对原对象的基本数据类型进行值传递;原对象的引用数据类型,复制一个引用指向原始引用的对象,复制的引用和原始引用指向同一个对象

浅拷贝和深拷贝的相同之处:

        (1)两种方法都会新建一个对象,

        (2)两种方法修改基本类型数据的属性不会对原对象产生影响;

区别:

        对子对象的复制方式不同。浅拷贝修改了子对象,会对原对象产生影响;而深拷贝修改子对象不会对原对象产生影响。

4、区分赋值和浅拷贝

赋值是将某一数值或对象赋给某个变量的过程,分为:

1、基本数据类型:赋值,赋值之后两个变量互不影响

2、引用数据类型:赋,两个变量具有相同的引用,指向同一个对象,相互之间有影响

区别:

(1)赋值不会新建对象,和原数据指向同一个对象;浅拷贝会新建对象,不会和原数据指向同一个对象。

(2)赋值因为和原数据指向同一个对象,所以不管是修改基本数据类型,还是子对象,都会使原数据一起发生改变;

         而浅拷贝,修改基本数据类型不会使原数据一起发生改变,但是修改子对象会使原数据一起发生改变。

!!!注意如果是对基本数据类型的变量进行赋值,赋值之后两个变量是互不影响的。!!!

 这两篇博客讲得比较清楚:彻底讲明白浅拷贝与深拷贝 - 简书一、数据类型 数据分为基本数据类型(String, Number, Boolean, Null, Undefined,Symbol)和对象数据类型。 1、基本数据类型的特点:...https://www.jianshu.com/p/35d69cf24f1f

浅析JavaScript解析赋值、浅拷贝和深拷贝的区别 - saucxs - 博客园文章首发于sau交流学习社区 一、赋值(Copy) 赋值是将某一数值或对象赋给某个变量的过程,分为: 1、基本数据类型:赋值,赋值之后两个变量互不影响 2、引用数据类型:赋**址**,两个变量具有相同https://www.cnblogs.com/chengxs/p/10788442.html

5、总结:对“引用数据类型”进行赋值、浅拷贝、深拷贝的区别

 6、拓展:不可变对象

在搜索浅拷贝和深拷贝的时候,发现有些博主会提到不可变对象,贴个链接,简单了解一下。

深入理解Java中的不可变对象 - Matrix海子 - 博客园深入理解Java中的不可变对象 不可变对象想必大部分朋友都不陌生,大家在平时写代码的过程中100%会使用到不可变对象,比如最常见的String对象、包装器对象等,那么到底为何Java语言要这么设计,真https://www.cnblogs.com/dolphin0520/p/10693891.html


 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值