Java中深拷贝和浅拷贝的区别 分析复制差异

深拷贝与浅拷贝的关键区别在于是否复制对象内部的引用对象。1. 浅拷贝仅复制对象的非引用类型字段,引用类型字段则共享同一地址,修改一个对象的引用字段会影响其他对象;2. 深拷贝递归复制所有引用对象,生成完全独立的新对象,修改新对象不影响原对象。3. 实现深拷贝的方式包括手动递归复制、重写 clone() 方法、序列化与反序列化、使用第三方库等。4. 选择拷贝方式需根据场景决定:浅拷贝适用于引用对象不可变或需要共享的情况,深拷贝适用于需完全独立的场景。5. 实现深拷贝时需注意循环引用问题,可通过缓存已复制对象避免无限递归。6. 深拷贝性能开销较大,在高性能场景中应谨慎使用或采用优化策略。

Java中深拷贝和浅拷贝的区别 分析复制差异

深拷贝和浅拷贝,关键在于拷贝对象时,是否复制了对象内部的引用对象。浅拷贝只复制引用,深拷贝则会递归地复制所有引用对象,生成全新的独立对象。

Java中深拷贝和浅拷贝的区别 分析复制差异

深拷贝和浅拷贝的区别,本质上是对对象内部引用类型的处理方式不同。

Java中深拷贝和浅拷贝的区别 分析复制差异

浅拷贝的陷阱:共享的引用

浅拷贝,也叫影子拷贝,创建新对象时,只复制原始对象的非引用类型字段的值。对于引用类型字段,新对象只是复制了引用地址,这意味着新对象和原始对象共享同一个引用对象。修改其中一个对象的引用对象,另一个对象也会受到影响。例如:

立即学习Java免费学习笔记(深入)”;

Java中深拷贝和浅拷贝的区别 分析复制差异

class Address {    String city;    public Address(String city) {        this.city = city;    }    public String getCity() {        return city;    }    public void setCity(String city) {        this.city = city;    }}class Person {    String name;    Address address;    public Person(String name, Address address) {        this.name = name;        this.address = address;    }    public String getName() {        return name;    }    public Address getAddress() {        return address;    }    public void setAddress(Address address) {        this.address = address;    }    // 浅拷贝方法    public Person shallowCopy() {        return new Person(this.name, this.address);    }}public class Main {    public static void main(String[] args) {        Address address = new Address("Beijing");        Person person1 = new Person("Alice", address);        Person person2 = person1.shallowCopy();        // 修改 person2 的地址        person2.getAddress().setCity("Shanghai");        System.out.println("Person1's city: " + person1.getAddress().getCity()); // 输出 Shanghai        System.out.println("Person2's city: " + person2.getAddress().getCity()); // 输出 Shanghai    }}

登录后复制

文章来自互联网,不代表电脑知识网立场。发布者:,转载请注明出处:https://www.pcxun.com/n/733710.html

(0)
上一篇 2025-06-13 15:10
下一篇 2025-06-13 15:10

相关推荐