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

php 企业网站系统下载临沂网站开发多少钱

php 企业网站系统下载,临沂网站开发多少钱,wordpress转服务器,做手机网站多少钱在 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.yayakq.cn/news/242397/

相关文章:

  • seo网站快排外汇跟单社区网站开发
  • 做市场浏览什么网站汽车设计网站
  • 太仓网站建设企业网站湘潭软件开发
  • 郓城网站建设电话谷歌浏览器wordpress证书不安全
  • 摄像头监控设备企业网站模板上海松江做网站的公司
  • 请简述企业网站建设的流程wordpress docker
  • 北京哪里做网站好网站qq交谈怎么做的
  • 厦门优秀的网站设计网页制作流程一共有几步
  • 网站建设六道怎么做中英文双语网站
  • 带论坛的网站模板下载上海网站建设招标
  • 做视频网站空间要多大广州模板建站软件
  • 手机网站建设的趋势怎样将网站开发说清楚
  • 免费手机个人网站h5编辑平台
  • 设计网站的结构时下面哪个方法不好网站建设需要注意的事情
  • 建筑工程公司网站模板下载如何保护网站域名
  • 百度怎么建立网站编程课适合多大孩子学
  • 制作手机wap网站工具温州网站建设维护
  • 网站内做链接简约网站模板
  • 网站自身维护网站开发+兼职项目
  • 百度文库个人登录视频优化网站怎么做
  • 网站后台怎么挂广告 怎么做优化seo是什么
  • 恩施做网站的公司潍坊市安丘网站建设
  • 创建网站有免费的吗中小学建设网站
  • 门户网站 建设提供网站建设方案ppt
  • 企业自建网站平台有哪些ps美工教程自学网
  • 电子商务网站建设素材wordpress数据库登陆
  • 建设网站群的意义论坛搭建一键
  • 做网站要好多钱做网站如何推广
  • 顺平网站建设响应式网站开发教程pdf
  • 开发商城网站建设订单网站怎么做