连着三次都被大厂面试问到的java面试高频题,一分钟带你彻底搞懂

发布时间:2026/7/11 3:34:39

连着三次都被大厂面试问到的java面试高频题,一分钟带你彻底搞懂 一、浅拷贝是什么浅拷贝会创建一个新的外层对象但内部的引用类型成员仍然指向原来的对象。例如classAddress{Stringcity;}classPersonimplementsCloneable{Stringname;Addressaddress;OverrideprotectedPersonclone()throwsCloneNotSupportedException{return(Person)super.clone();}}执行Personp2p1.clone();此时p1 ! p2 p1.address p2.address也就是说Person被复制了但Address仍然共用。如果修改p2.address.city上海;那么p1.address.city也会变成“上海”。浅拷贝常见实现方式1. Object.clone()默认是浅拷贝 2. 拷贝构造方法中直接复制引用 3. 手动字段赋值例如this.addressother.address;这就是浅拷贝因为没有创建新的Address。二、深拷贝是什么深拷贝不仅会复制外层对象还会把内部引用对象也重新创建一份。例如classAddress{Stringcity;publicAddress(Addressother){this.cityother.city;}}classPerson{Stringname;Addressaddress;publicPerson(Personother){this.nameother.name;this.addressnewAddress(other.address);}}执行Personp2newPerson(p1);此时p1 ! p2 p1.address ! p2.address修改p2.address不会影响p1.address。深拷贝常见实现方式1. 在 clone() 中继续克隆内部对象 2. 深拷贝构造方法 3. 手动逐层创建新对象 4. Java 序列化 5. JSON 序列化例如Personcopied(Person)super.clone();copied.addressthis.address.clone();这样内部对象也被重新复制才是深拷贝。三、核心区别对比项浅拷贝深拷贝外层对象是否复制是是内部引用对象是否复制否是是否共享内部对象是否修改内部对象是否互相影响会不会实现难度较低较高四、直接赋值不属于拷贝下面这句Personp2p1;不是浅拷贝而只是复制了引用。此时p1 和 p2 指向同一个 Person 对象三者区别可以记成直接赋值外层对象共用内部对象也共用 浅拷贝外层对象独立内部对象共用 深拷贝外层对象独立内部对象也独立五、实际开发怎么选简单对象可以使用浅拷贝。对象中包含可变引用成员并且不希望副本修改影响原对象时应使用深拷贝。实际项目中更推荐简单清晰拷贝构造方法 性能优先手动逐层复制 使用方便JSON 序列化 传统方式clone()但要注意super.clone()默认只实现浅拷贝不会自动复制内部对象。六、一句话总结浅拷贝只复制外层对象内部引用仍然共享深拷贝会把内部对象也复制一份因此新旧对象互不影响。

相关新闻