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

相关内容

热门资讯

马云现身了!带来高管“插秧”,... 一家公司的最高权力不在董事会,不在大股东,而在一位已经退休的创始人,这在全国是独此一份,它就是阿里,...
恒瑞医药瑞维鲁胺片提交欧盟上市... 来源:恒瑞医药近日,恒瑞医药宣布欧洲药品管理局(EMA)已确认受理瑞维鲁胺片(Renruirez®,...
券商下调多只龙头股盈利预测,格... 沪指重返4100点之际,部分个股却遭券商下调盈利预测,其中不乏一些大市值龙头股。据光大证券最新披露,...
黑蚁资本张沛元:所有优秀消费企... 中国消费企业已不只有供应链能力,也开始长出了产品定义能力。《中国企业家》记者 胡楠楠编辑|米娜图片来...
底价10.6亿,杰士邦遭人福医... 来源:密探财经(ID:Spy Finance)背靠招商局集团的人福医药,如今顶着“ST”风险警示帽子...