java基础:浅拷贝与深拷贝
创始人
2025-05-28 16:37:39

1、java中深浅拷贝的区别?

  • 浅拷贝:只对基本数据类型进行拷贝,对于引用数据类型只是进行了引用的传递,没有真实的创建一个新的对象,则是浅拷贝;(参数引用传递中的改变源对象情况)
    在这里插入图片描述

  • 深拷贝:在对引用数据类型拷贝过程中,创建了一个新的对象,并且复制了对象内的所有成员变量,则是深拷贝(参数引用传递中的不改变源对象情况)

在这里插入图片描述

1.1 java浅拷贝的实现?

Cloneable 接口,并覆写 clone() 方法,clone()方法实现的是对当前对象进行拷贝。

1.2 java深拷贝的实现

  • Cloneable 接口,并覆写 clone() 方法
    需要拿到拷贝自己后产生的新的对象,然后对新的对象的引用类型再调用拷贝操作,实现对引用类型成员变量的深拷贝。
    实现两次clone,第一次得到当前对象浅拷贝,然后再对新的对象引用类型调用拷贝实现深拷贝
  • 序列化对象,再反序列化回来,然后就可以得到一个新的对象,

1.3 什么是序列化?(serialization涉及到IO部分)

将对象写入到io流中,反序列化是从io流中恢复对象;

2、java方法中的参数传递?(都是传递副本,值传递,java中没有引用传递)

问:当一个对象当作参数传递到一个方法之后,此方法可以改变对象属性,并且可以返回变化后的对象,那么这里是值传递还是对象传递。。
答:java中只有值传递参数

  • 如果参数类型是基本数据类型,值传递,改变副本的值不会改变原始数据的值;
  • 如果参数类型是引用数据类型,传过来的是对象地址副本,如果方法中没有改变地址的值,方法内针对对象的改变会影响到传入的参数;(浅拷贝)
  • 如果参数类型是引用数据类型,函数中改变了副本的地址,比如new一个,也就是副本指向一个新的地址,此时方法中针对对象的改变不会影响到传入参数对象;(深拷贝)

相关内容

热门资讯

平安与华夏幸福七年“联姻”破裂... 平安投资华夏幸福的失败案例,为中国金融业提供了深刻的教训。文/每日财报 南黎大股东平安系与华夏幸福...
助“燃”体育热 浙江稠州商业银... 当“浙BA”的加油呐喊穿越街头巷尾,当队员们的飒爽英姿跃动于城市赛场,深厚的体育基因正催生出一条蓬勃...
儿药龙头葫芦娃药业及董事长被立... 红星资本局12月29日消息,知名儿药企业ST葫芦娃(605199.SH,或称“葫芦娃药业”)昨日晚间...
洗牌+革新!2026公募五大趋... 即将过去的2025年,中国公募基金行业在经历了一场深刻的“自我革命”之后,走上了从“高速增长”向“高...
2025商业札记|观察家 这些点滴,记录的不是“成功”和失败,是商业世界中的“行之于途而应于心”,欢欣地接纳意外,与变革一起沉...