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一个,也就是副本指向一个新的地址,此时方法中针对对象的改变不会影响到传入参数对象;(深拷贝)

相关内容

热门资讯

科创板创新药企BD授权交易总额... 2026年半年度财报季已收官,在创新药企业以业绩扭亏和BD兑现吸引市场目光的同时,以CXO为代表的上...
本周末10余家公司披露回购增持... 9月13日晚间,三一重工、天安新材、永茂泰等多家主板公司同步披露股份回购进展,以真金白银的行动践行对...
李想发文:i9是满分答卷,理想... 9月10日,理想汽车CEO李想通过个人微博发文宣布,理想i9将于9月16日正式发布。李想表示,理想i...
胡塞速通红海西岸,伊朗手握两大... 谁也没想到,胡塞武装突然发威,从9月3号南下发起总攻,打得沙特支持的也门政府军节节败退,尤其是9月1...
周末10余家沪市主板公司披露回... 中经记者 孙汝祥 夏欣 北京报道9月13日晚间,三一重工、天安新材、永茂泰等多家主板公司同步披露股份...