JVM 面试炸裂题:深拷贝 VS 浅拷贝,99% 的人答不清!

一次令人窒息的面试体验

事情发生在我上一份工作离职后。那段时间信心爆棚,觉得自己对JVM烂熟于心,GC啊、内存模型啊,轻轻松松就能应对。

结果到了美团面试,面试官一开口:“你能说说深拷贝和浅拷贝的区别吗?”

我心里一乐,这不送分题嘛!

“浅拷贝就是只拷贝对象的第一层,深拷贝是连引用的对象也都复制一份。”

说完我就等着夸奖,结果面试官一挑眉:“那如果对象里嵌套了多个引用,浅拷贝和深拷贝在内存上分别会是怎样的结构?”

……

完了,脑子顿时嗡嗡响,我竟然说不出具体场景,只能干巴巴地扯了点 clone() 的话题,最后草草结束。

回家路上我一直在想:这么简单的知识点,为什么我在关键时刻说不清楚?

那晚我重新捡起了笔记,从JVM内存模型、对象结构到实际代码实现,一个点一个点抠,才发现“深拷贝 vs 浅拷贝”远没有我们想象中那么简单。

什么是浅拷贝?

我们先从“浅拷贝”聊起。

浅拷贝指的是:只复制当前对象本身的字段,对于引用类型的字段,只复制引用地址,不复制其指向的对象本身。

说人话就是——表面复制一份,看起来和原来一样,其实底层的引用指向的还是同一块内存区域。

举个小例子:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

软件求生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值