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

相关内容

热门资讯

春节假期全球权益、避险资产同步... 今年中国春节假期期间,全球市场呈现权益资产与避险资产同步走强格局。统计数据显示,2月15日至2月23...
流线更优,运行更稳,东城公安护... 春节期间,北京地坛庙会、龙潭庙会如约而至。民俗展演轮番登场,非遗市集人头攒动,特色美食烟火升腾,游客...
我,30岁,做乡村运营生意,公... 年轻创业者正在以市场化的方式重写乡村叙事。文|《中国企业家》记者邓双琳编辑|马吉英图片来源|受访者正...
“要带更多商业合作”来中国 随着斯塔默访华及中英新一轮高层对话,两国经贸关系呈现“暖春”态势。“将加快塑造吸引外资的新优势,让外...
2026年了,高速充电还难么?... 2月17日,正月初一,天刚蒙蒙亮,上海的街头还浸在除夕夜的余温里。红灯笼挂满了小区楼道,这是一年中最...