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

网站建设后台管理有做网站的吗

网站建设后台管理,有做网站的吗,怎么样建设网站赚钱,莆田网站设计在 Java 中,深拷贝和浅拷贝是对象拷贝(复制)时的两个重要概念,它们决定了拷贝后的对象与原对象之间的关联性。以下是深拷贝和浅拷贝的详解,包括定义、实现方式及其区别。 1. 概念解释 1.1 浅拷贝(Shallow …

在 Java 中,深拷贝浅拷贝是对象拷贝(复制)时的两个重要概念,它们决定了拷贝后的对象与原对象之间的关联性。以下是深拷贝和浅拷贝的详解,包括定义、实现方式及其区别。


1. 概念解释

1.1 浅拷贝(Shallow Copy)

浅拷贝是对对象的一种表层复制

  • 基本数据类型的字段会复制其值。
  • 引用数据类型的字段会复制其引用地址(即引用同一个对象)。

拷贝后的对象与原对象共享引用类型的成员。

特性

  • 拷贝对象与原对象的引用类型字段指向同一个内存地址。
  • 修改引用类型的内容会影响到原对象。

1.2 深拷贝(Deep Copy)

深拷贝是对对象的一种完全复制

  • 基本数据类型的字段会复制其值。
  • 引用数据类型的字段会递归拷贝新对象,即创建新的内存空间,拷贝后不共享引用。

拷贝后的对象与原对象完全独立。

特性

  • 拷贝对象与原对象互不影响,任何修改只会影响对应对象。

2. 示例代码

2.1 浅拷贝示例

使用 Object.clone() 方法实现浅拷贝:

class Person implements Cloneable {String name;Address address;Person(String name, Address address) {this.name = name;this.address = address;}@Overrideprotected Object clone() throws CloneNotSupportedException {return super.clone(); // 调用 Object 的 clone 方法}
}class Address {String city;Address(String city) {this.city = city;}
}public class ShallowCopyExample {public static void main(String[] args) throws CloneNotSupportedException {Address address = new Address("New York");Person person1 = new Person("John", address);// 浅拷贝Person person2 = (Person) person1.clone();// 修改拷贝对象的引用类型字段person2.address.city = "Los Angeles";// 原对象的引用类型字段也被修改System.out.println(person1.address.city); // 输出:Los Angeles}
}

2.2 深拷贝示例

手动实现深拷贝:

class Person implements Cloneable {String name;Address address;Person(String name, Address address) {this.name = name;this.address = address;}@Overrideprotected Object clone() throws CloneNotSupportedException {// 创建一个浅拷贝Person clonedPerson = (Person) super.clone();// 手动深拷贝引用类型字段clonedPerson.address = new Address(this.address.city);return clonedPerson;}
}class Address {String city;Address(String city) {this.city = city;}
}public class DeepCopyExample {public static void main(String[] args) throws CloneNotSupportedException {Address address = new Address("New York");Person person1 = new Person("John", address);// 深拷贝Person person2 = (Person) person1.clone();// 修改拷贝对象的引用类型字段person2.address.city = "Los Angeles";// 原对象的引用类型字段未被修改System.out.println(person1.address.city); // 输出:New York}
}

3. 区别对比

特性浅拷贝深拷贝
拷贝方式仅复制对象的基本类型字段和引用类型字段的引用地址。复制对象的所有字段,包括引用类型字段所指向的对象。
内存分配原对象和拷贝对象共享引用类型字段的内存地址。原对象和拷贝对象完全独立,占用不同的内存空间。
修改影响修改拷贝对象的引用类型字段会影响原对象。修改拷贝对象不会影响原对象。
实现复杂度简单,可以直接使用 Object.clone() 方法。较复杂,需要手动实现递归拷贝。
适用场景引用类型字段无需独立,或对性能要求高的场景。引用类型字段需要独立且完全隔离的场景。

4. 实现深拷贝的常用方式

4.1 使用 clone() 方法

  • 递归实现拷贝每个引用类型字段。
  • 需要确保所有类都实现 Cloneable 接口,并重写 clone() 方法。

4.2 使用序列化

通过将对象序列化为字节流再反序列化来实现深拷贝:

import java.io.*;class Person implements Serializable {String name;Address address;Person(String name, Address address) {this.name = name;this.address = address;}
}class Address implements Serializable {String city;Address(String city) {this.city = city;}
}public class DeepCopyWithSerialization {public static void main(String[] args) throws IOException, ClassNotFoundException {Address address = new Address("New York");Person person1 = new Person("John", address);// 深拷贝Person person2 = deepCopy(person1);// 修改拷贝对象的引用类型字段person2.address.city = "Los Angeles";// 原对象的引用类型字段未被修改System.out.println(person1.address.city); // 输出:New York}// 序列化深拷贝方法private static <T> T deepCopy(T object) throws IOException, ClassNotFoundException {ByteArrayOutputStream byteOut = new ByteArrayOutputStream();ObjectOutputStream out = new ObjectOutputStream(byteOut);out.writeObject(object);ByteArrayInputStream byteIn = new ByteArrayInputStream(byteOut.toByteArray());ObjectInputStream in = new ObjectInputStream(byteIn);return (T) in.readObject();}
}

4.3 使用第三方库

一些第三方库(如 Apache Commons Lang 的 SerializationUtils)可以简化深拷贝的实现。


5. 注意事项

  1. Cloneable 接口的限制

    • 默认的 Object.clone() 方法只能实现浅拷贝,需要手动实现深拷贝。
  2. 性能考虑

    • 深拷贝通常比浅拷贝耗时更多,尤其是引用类型字段复杂时。
  3. 引用循环问题

    • 如果对象内部存在循环引用(即对象引用自身或其他对象),需要特别处理,避免递归拷贝时发生栈溢出。
  4. 使用场景选择

    • 如果引用类型字段无需独立修改,浅拷贝通常已足够。
    • 如果引用类型字段需要独立,且修改后不影响原对象,使用深拷贝。

6. 总结

浅拷贝深拷贝
仅复制值类型字段和引用地址复制值类型字段,并递归复制引用类型字段所指向的对象
性能较高,但存在引用共享的问题性能较低,但保证拷贝对象独立
适用于引用类型字段无需独立修改的场景适用于引用类型字段需要独立且完全隔离的场景

在实际应用中,应根据具体需求选择合适的拷贝方式。浅拷贝适用于简单的场景,而深拷贝更适合复杂对象需要完全隔离的场景。

http://www.hengruixuexiao.com/news/12762.html

相关文章:

  • 高清视频服务器内存广东seo
  • 苏州建设网站制作100个免费推广网站
  • 黄骅做网站品牌宣传策略
  • 时时彩网站建设企业查询系统官网
  • 做淘宝客网站用什么源码好网站入口
  • wordpress查看自己网站的ip量网络营销策划书论文
  • 托管网站是什么意思网络营销策略包括哪些
  • 有哪些网站可以做家教镇江seo公司
  • 视频网站建设公司广告营销案例100例
  • 网页设计实验报告实验内容网站seo关键词优化技巧
  • 前端响应式布局聊城优化seo
  • 小说网站防盗做的好网站怎么搭建
  • windows10前段网站建设网络销售平台上市公司有哪些
  • 网站如何做用户的实名认证网站seo方案案例
  • 做网站排名费用多少百度关键词排名手机
  • 全屏网站设计尺寸百度经验实用生活指南
  • 淘宝优惠券网站建设宁波网站推广哪家公司好
  • 俄语网站建设公司网络推广客服好做吗
  • 深圳做商城网站seo课程简介
  • 山东济南网网站建设网络营销名词解释答案
  • 网站空间送域名价格表在线h5免费制作网站
  • 网站后台点击添加图片没有反应经典软文案例
  • 哈尔滨网站域名部门模板网站好还是自助建站好
  • 杭州网站推广优化最有效的推广方法
  • 上海网页制作报价搜索引擎优化seo多少钱
  • 网站滚动条北京百度竞价
  • 邻水县规划和建设局 网站产品全网营销推广
  • cms 动态网站开发抖音优化是什么意思
  • web服务器架构seo的五个步骤
  • 平面设计可以做网站可视化网页制作工具