说说深拷贝和浅拷贝?
1 个回答
纵然前路迷茫,纵然天隔一方,纵然我手中的刀刃已然破碎,也无法阻挡我寻找你的道路。阿银#### 浅拷贝(Shallow Copy) 浅拷贝仅复制对象的引用,而不复制对象本身。也就是说,浅拷贝后的新对象和原对象共享同一块内存地址。因此,对新对象的修改会影响到原对象,反之亦然。 #### 深拷贝(Deep Copy) 深拷贝不仅复制对象的引用,还会为新对象分配新的内存空间,并复制原对象的所有内容到新的内存空间。因此,深拷贝后的新对象与原对象互不影响,修改新对象不会影响原对象,反之亦然。 #### 示例 假设有一个对象 `A`: ```java class Person { String name; int age; } Person original = new Person(); original.name = "John"; original.age = 30; ``` ##### 浅拷贝 浅拷贝可以通过克隆方法实现: ```java Person shallowCopy = original; ``` 在这种情况下,`shallowCopy` 和 `original` 共享同一个内存地址,对 `shallowCopy` 的修改会影响到 `original`。 ##### 深拷贝 深拷贝需要手动创建新对象并复制内容: ```java Person deepCopy = new Person(); deepCopy.name = original.name; deepCopy.age = original.age; ``` 这样,`deepCopy` 和 `original` 是两个独立的对象,互不影响。 ### 克隆和原型模式 - **克隆(Clone)**:Java 提供了 `Cloneable` 接口和 `clone()` 方法来实现对象的浅拷贝。为了实现深拷贝,通常需要手动实现 `clone()` 方法,并递归地克隆对象的所有属性。 - **原型模式(Prototype Pattern)**:原型模式是一种创建型设计模式,通过复制现有对象来创建新对象。原型模式可以使用浅拷贝或深拷贝,具体取决于实现方式。原型模式适用于需要大量相似对象的场景,可以提高对象创建的效率。 #### 示例 ```java class Person implements Cloneable { String name; int age; // 浅拷贝 protected Object clone() throws CloneNotSupportedException { return super.clone(); } // 深拷贝 protected Person deepClone() { Person clone = new Person(); clone.name = this.name; clone.age = this.age; return clone; } } ``` 在原型模式中,可以通过 `clone()` 方法快速复制对象,提高效率,同时根据需要选择浅拷贝或深拷贝的实现方式。发布于 2024-07-04 21:03 •IP属地 广西举报评论收藏
公众号进入网站体验更佳

