前几天编码遇到了深拷贝和浅拷贝,下面分享一下。
1.对于对象apple1直接赋值,其实只是存储对apple的引用,apple对象的修改会影响到apple1,apple1的修改会影响apple。
下面实现一下深拷贝,使apple和apple1的修改不会影响对方
public class Apple implements Cloneable{
private String name;
private String color;
public void setName(String name){
this.name = name;
}
public String getName(){
return name;
}
public void setColor(String color){
this.color = color;
}
public String getColor(){
return color;
}
@Override
public Object clone() throws CloneNotSupportedException {
Apple apple = (Apple) super.clone();
apple.name = this.name;
apple.color = this.color;
return apple;
}
}
public void Test(){
public static void main(String[] args) {
Apple apple = new Apple();
Apple apple1 = apple.clone();
}
}
2.对于容器的深拷贝的实现
public void Test{
public static void main(String[] args) {
Apple a = new Apple();
List list = new LinkedList();
list.add(a);
ListcopyList = deepCopy(list);
}
public static List deepCopy(List src) throws IOException, ClassNotFoundException{
ByteArrayOutputStream byteOut = new ByteArrayOutputStream();
ObjectOutputStream out = new ObjectOutputStream(byteOut);
out.writeObject(src);
ByteArrayInputStream byteIn = new ByteArrayInputStream(byteOut.toByteArray());
ObjectInputStream in =new ObjectInputStream(byteIn);
List dest = (List)in.readObject();
return dest;
}
}
相关推荐
深拷贝和浅拷贝一些例子
接下来,我们详细探讨浅拷贝和深拷贝的区别、问题所在以及如何解决。 首先,浅拷贝是指在对象复制过程中,只是简单地复制了对象的指针,而没有复制指针所指向的数据。在浅拷贝的情况下,多个对象可能会指向同一块...
对于不可变类型(如整数、字符串、元组),浅拷贝和深拷贝没有实质区别,因为这些类型不可变,所以拷贝后的新对象和原对象是等价的,但不一定是同一对象(即`is`操作符可能返回`False`)。 总之,深拷贝和浅拷贝的...
在编程领域,尤其是在使用像JavaScript、Python这样的动态类型语言时,深拷贝和浅拷贝是两个非常重要的概念。它们涉及到对象复制的过程,对于理解和解决内存管理、数据修改等问题至关重要。下面将详细解释这两个概念...
JavaScript中的深拷贝和浅拷贝是编程面试中常见的概念,尤其在处理对象和数组时至关重要。它们主要涉及的是变量赋值时数据的复制方式。简单来说,浅拷贝是创建了一个新对象,但它的属性仍然是对原对象属性的引用,而...
【ASP.NET编程知识】浅谈.NET平台下深拷贝和浅拷贝 在.NET平台下,对象拷贝是一个常见的操作,主要分为两种类型:浅拷贝(Shallow Copy)和深拷贝(Deep Copy)。这两种拷贝方式在处理对象复制时有着显著的区别,对...
当我们谈论深拷贝和浅拷贝时,这是针对对象复制而言的。浅拷贝仅仅复制对象的引用,而深拷贝则是创建一个全新的对象,包含所有原始对象的属性值,并且如果属性是复杂类型(即引用类型),也会递归地复制其内部属性。...
在给出的例子中,我们有两个测试类`Test2`和`Test3`,分别演示了浅拷贝和深拷贝的效果。 - 在`Test2`中,通过简单赋值创建了一个新的`Test`对象`t2`,这是浅拷贝。当修改`t2`的属性时,`t1`的属性也会随之改变,...
在Python编程语言中,"copy"模块提供了对对象复制的...了解深拷贝和浅拷贝的概念后,开发者可以根据具体需求选择合适的方法。在实际编程中,结合使用`copy`模块和`deepcopy`函数,可以更有效地管理内存和数据的独立性。
前端面试相关-深拷贝和浅拷贝的实现方法和区别
js中的浅拷贝和深拷贝,只是针对复杂数据类型(Objcet,Array)的复制问题。简单来讲浅拷贝和深拷贝都可以实现在原有对象的基础上再生成一份的作用。但是根据新生成的对象能否影响到原对象可以分为浅拷贝和深拷贝。 ...
当我们复制一个对象时,有两种主要的方法:浅拷贝和深拷贝。 2. **浅拷贝(浅复制)** 浅拷贝是指创建一个新对象,然后将原对象的引用字段的值复制到新对象中。这意味着新旧两个对象指向相同的内存区域。如果原...
1、只有NS类型调用copy方法才是浅拷贝,其他的情况全是深拷贝 2、容器类调用copy或mutableCopy能出现的深拷贝的情况下,只是容器的深拷贝,而非容器内元素的深拷贝 3、无论是声明NSString还是NSMutableString类型的...
在iOS开发中,深拷贝和浅拷贝是两个关键概念,它们涉及到对象复制时内存管理的细节。本文将从源码角度深入解析这两种拷贝方式。 首先,我们需要明确深拷贝和浅拷贝的基本定义。浅拷贝,也称为指针拷贝,意味着拷贝...
然而,复制行为可以根据对象内部属性的引用方式被区分为深拷贝和浅拷贝。理解这两者之间的区别对于编写正确和高效的代码至关重要。本文将详细探讨JavaScript中的深拷贝和浅拷贝,包括它们的定义、实现方法以及在不同...
Java Clone 深拷贝与浅拷贝的两种实现方法 Java Clone 是 Java 语言中的一种复制对象的机制,它可以将一个对象的所有属性和状态复制到另一个对象中,实现对象的深拷贝和浅拷贝。下面我们将讨论 Java 中的深拷贝和浅...
深拷贝和浅拷贝的选择取决于数据结构的特性以及应用场景的需求。了解深拷贝与浅拷贝的工作原理对于编写高效可靠的代码至关重要。同时,熟悉堆与栈的概念有助于更好地理解和优化程序的内存使用情况。在实际开发过程中...