当前位置: 首页 > wzjs >正文

辽宁城建设计院有限公司网站静态网站开发步骤

辽宁城建设计院有限公司网站,静态网站开发步骤,东莞市主营网站建设平台,商务网站建设作业在Java中,深拷贝和浅拷贝是两种不同的对象复制方式,主要区别在于它们如何处理对象内部的引用类型字段。 浅拷贝(Shallow Copy) 浅拷贝创建一个新对象,并将原对象的字段值复制到新对象中。如果字段是基本类型&#xf…

在Java中,深拷贝和浅拷贝是两种不同的对象复制方式,主要区别在于它们如何处理对象内部的引用类型字段。

浅拷贝(Shallow Copy)

浅拷贝创建一个新对象,并将原对象的字段值复制到新对象中。如果字段是基本类型,则直接复制值;如果字段是引用类型,则复制引用(即内存地址),因此新对象和原对象共享相同的引用类型字段。

实现方式:

  • 实现 Cloneable 接口并重写 clone() 方法。
  • 使用工具类(如 BeanUtils.copyProperties)。
class Person implements Cloneable {String name;Address address;public Person(String name, Address address) {this.name = name;this.address = address;}@Overrideprotected Object clone() throws CloneNotSupportedException {return super.clone(); // 浅拷贝}
}class Address {String city;public Address(String city) {this.city = city;}
}public class Main {public static void main(String[] args) throws CloneNotSupportedException {Address address = new Address("Beijing");Person person1 = new Person("Alice", address);Person person2 = (Person) person1.clone();System.out.println(person1.address == person2.address); // true,共享同一个Address对象}
}

深拷贝(Deep Copy)

深拷贝创建一个新对象,并递归地复制原对象的所有字段。如果字段是引用类型,则创建该字段的新副本,而不是共享引用。因此,新对象和原对象完全独立。
实现方式:

  • 手动实现递归复制。
  • 使用序列化(如 Serializable 接口)。
  • 使用第三方库(如 Apache Commons Lang 的 SerializationUtils)。
  • 如果对象包含循环引用,深拷贝需要特别处理,否则可能导致栈溢出。
  • 序列化方式实现深拷贝要求所有相关类都实现 Serializable 接口。
import java.io.*;class Person implements Serializable {String name;Address address;public Person(String name, Address address) {this.name = name;this.address = address;}public Person deepCopy() throws IOException, ClassNotFoundException {// 使用序列化实现深拷贝ByteArrayOutputStream bos = new ByteArrayOutputStream();ObjectOutputStream oos = new ObjectOutputStream(bos);oos.writeObject(this);ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray());ObjectInputStream ois = new ObjectInputStream(bis);return (Person) ois.readObject();}
}class Address implements Serializable {String city;public Address(String city) {this.city = city;}
}public class Main {public static void main(String[] args) throws IOException, ClassNotFoundException {Address address = new Address("Beijing");Person person1 = new Person("Alice", address);Person person2 = person1.deepCopy();System.out.println(person1.address == person2.address); // false,Address对象是独立的}
}

对比

特性浅拷贝深拷贝
基本类型字段复制值复制值
引用类型字段复制引用(共享同一对象)递归复制(创建新对象)
实现复杂度简单复杂
性能较高较低
适用场景对象内部没有引用类型字段或共享引用无影响需要完全独立的对象副本

拓展知识

Java 中的 clone() 方法

  • clone() 是 Object 类的一个方法,用于创建对象的副本。
  • 默认的 clone() 方法是浅拷贝。
  • 使用 clone() 需要满足以下条件:
    • 类必须实现 Cloneable 接口(标记接口,没有方法)。
    • 重写 clone() 方法,并将其访问修饰符改为 public。
  • 注意:clone() 方法不会调用构造函数。
class Person implements Cloneable {String name;int age;public Person(String name, int age) {this.name = name;this.age = age;}@Overridepublic Person clone() {try {return (Person) super.clone();} catch (CloneNotSupportedException e) {throw new RuntimeException(e);}}
}

序列化实现深拷贝

通过序列化和反序列化可以实现深拷贝。但要求所有相关类都实现 Serializable 接口。

  • 优点:简单易用,适合复杂对象图的深拷贝。
  • 缺点:性能较低,且要求所有字段都可序列化。
import java.io.*;class DeepCopyUtil {public static <T extends Serializable> T deepCopy(T object) {try (ByteArrayOutputStream bos = new ByteArrayOutputStream();ObjectOutputStream oos = new ObjectOutputStream(bos)) {oos.writeObject(object);try (ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray());ObjectInputStream ois = new ObjectInputStream(bis)) {return (T) ois.readObject();}} catch (IOException | ClassNotFoundException e) {throw new RuntimeException("Deep copy failed", e);}}
}

深拷贝与不可变对象
如果对象是不可变的(如 String、Integer 等),则浅拷贝和深拷贝的效果相同。不可变对象的值无法被修改,因此共享引用是安全的。

String s1 = "Hello";
String s2 = s1; // 浅拷贝,但因为是不可变对象,所以安全

深拷贝的性能问题
深拷贝需要递归复制整个对象图,可能会消耗较多内存和 CPU 资源。如果对象图非常大或嵌套层级很深,深拷贝可能会导致性能问题。
优化方法:

  • 使用懒加载(Lazy Copy):只有在修改时才复制对象。
  • 使用对象池或缓存机制。

深拷贝与线程安全

如果多个线程共享同一个对象,浅拷贝可能导致线程安全问题。深拷贝可以避免线程安全问题,因为每个线程操作的是独立的对象副本。


文章转载自:

http://5TGIUewB.jyfrz.cn
http://pf0xcPBy.jyfrz.cn
http://UHb49CLv.jyfrz.cn
http://MDS1IkNq.jyfrz.cn
http://9jGn7E8n.jyfrz.cn
http://yFurnvju.jyfrz.cn
http://t61XfYlH.jyfrz.cn
http://ZvntEj8O.jyfrz.cn
http://IasuRe2Z.jyfrz.cn
http://vdRIFMMK.jyfrz.cn
http://464cCP15.jyfrz.cn
http://ekb99mf6.jyfrz.cn
http://80DQlaGg.jyfrz.cn
http://m2oE7pxS.jyfrz.cn
http://cKcG6v3D.jyfrz.cn
http://UyCOEqHT.jyfrz.cn
http://iFYwSHB0.jyfrz.cn
http://8wJnKjFw.jyfrz.cn
http://18DRPMJM.jyfrz.cn
http://yBpZdZO9.jyfrz.cn
http://stKUGoiv.jyfrz.cn
http://ILX4lcXc.jyfrz.cn
http://QfuW5quK.jyfrz.cn
http://6yA2bAIQ.jyfrz.cn
http://y1tz2TBb.jyfrz.cn
http://b4po9QgP.jyfrz.cn
http://lIqrfyfm.jyfrz.cn
http://yFkcQooi.jyfrz.cn
http://Z2GiLMAm.jyfrz.cn
http://4gYBHUR6.jyfrz.cn
http://www.dtcms.com/wzjs/621668.html

相关文章:

  • 网站开发网站运营怎么做深圳建设培训中心网站
  • 腾讯做网站模版ppt
  • 陕西省城乡住房建设部网站网站建设的需求要素
  • 做网站原创要多少钱微商代理0元0投入
  • 那个网站做国外售货百度提交网站地图
  • 网站建设前 需要准备的旅游网站的功能结构图
  • 外币投资理财网站开发微信公众号前端开发教程
  • 赤峰酒店网站建设哪家便宜成都优化网站分析
  • 青岛城市建设局网站企业为什么做网站 图片
  • 网站关键词抓取设计师网站崩了
  • 网站搜索功能如何实现建设工程安全监督备案网站
  • 四川省城乡建设部网站首页wordpress 8.0怎么登录
  • 四川省建设执业注册中心网站ip备案信息查询
  • 怎么做网站推九州娱乐官方网站怎么做代理
  • 广西住建网官网重庆网站seo费用
  • 佛山做外贸网站信息企业网站优化托管
  • 商业网站建设与维护fm网站开发
  • 农村网站建设补助广州网站制作公司 番禺
  • 西宁网站建设兼职怎么生成链接
  • 成化区建设局网站平面设计有几个软件
  • 哪个免费自助建站系统最好用山东已经宣布封城的城市2022年
  • 扬州市建设局网站 竣工备案台州网站注册 公司
  • 外贸 企业网站 建设郑州市政务公开
  • 电子商务网站开发软件股票查询网站模板 wordpress
  • 51网站哪里去了建e网室内设计网图片
  • 目前热门的网站建设语言无忧网站优化
  • 做评测系统网站首先要干嘛如何对自己建设的网站进行推广
  • 网站建站和项目部署一样吗微信公众号怎么制作网页
  • 内力网站建设买域名不建网站
  • 中国第四冶金建设有限公司官方网站我要恢复百度