做外贸要访问国外的网站怎么办,wordpress的登录安全认证,wordpress创建表单,安徽省城乡建设信息网浅拷贝和深拷贝是两种不同的对象复制方式#xff0c;主要区别在于它们如何处理对象内部的引用类型字段。浅拷贝 (Shallow Copy)特点#xff1a;只复制对象本身#xff08;基本类型字段#xff09;和对象中的引用#xff08;地址#xff09;不复制引用指向的实际对象原始对…浅拷贝和深拷贝是两种不同的对象复制方式主要区别在于它们如何处理对象内部的引用类型字段。
浅拷贝 (Shallow Copy)特点只复制对象本身基本类型字段和对象中的引用地址不复制引用指向的实际对象原始对象和拷贝对象共享内部引用对象示例
class Person {String name;Address address; // 引用类型// 浅拷贝方法public Person shallowCopy() {Person copy new Person();copy.name this.name; // 基本类型或String的复制copy.address this.address; // 只是复制引用return copy;}
}结果修改拷贝对象的address会影响原始对象因为它们引用同一个Address对象深拷贝 (Deep Copy)特点复制对象本身及其所有引用的对象递归复制所有引用对象直到基本类型原始对象和拷贝对象完全独立不共享任何引用示例
class Person {String name;Address address;// 深拷贝方法public Person deepCopy() {Person copy new Person();copy.name this.name;copy.address new Address(this.address.street, this.address.city); // 创建新对象return copy;}
}结果修改拷贝对象的address不会影响原始对象因为它们引用不同的Address对象
对比表格特性浅拷贝深拷贝复制内容对象本身和引用地址对象本身和所有引用对象内存消耗较少较多性能较快较慢独立性不独立(共享引用对象)完全独立实现复杂度简单复杂(需要递归复制所有引用对象)实际应用场景使用浅拷贝当对象内部引用是不可变的(如String)当明确需要共享某些引用对象时性能要求高且不需要完全独立的对象时使用深拷贝需要完全独立的对象副本时当对象包含可变引用对象且不希望共享时在多线程环境中需要安全地共享数据时Java中的实现方式浅拷贝实现Cloneable接口并重写clone()方法手动复制字段深拷贝递归实现clone()方法使用序列化和反序列化使用第三方库如Apache Commons Lang的SerializationUtils.clone()使用复制构造函数或工厂方法// 使用序列化实现深拷贝
public static T extends Serializable T deepCopy(T object) {try {ByteArrayOutputStream baos new ByteArrayOutputStream();ObjectOutputStream oos new ObjectOutputStream(baos);oos.writeObject(object);ByteArrayInputStream bais new ByteArrayInputStream(baos.toByteArray());ObjectInputStream ois new ObjectInputStream(bais);return (T) ois.readObject();} catch (Exception e) {throw new RuntimeException(e);}
}