宜州网站建设,在小说网站做编辑怎么找,互联网网站建设挣钱吗,网格系统网站摘要#xff1a;本文将详细介绍Java中的深拷贝和浅拷贝概念#xff0c;通过分析源码和举例说明#xff0c;帮助读者更好地理解这两种拷贝方式的区别及应用场景。 一、深拷贝与浅拷贝的概念 深拷贝#xff1a;复制一个对象后#xff0c;无论是基本数据类型还是引用类型本文将详细介绍Java中的深拷贝和浅拷贝概念通过分析源码和举例说明帮助读者更好地理解这两种拷贝方式的区别及应用场景。 一、深拷贝与浅拷贝的概念 深拷贝复制一个对象后无论是基本数据类型还是引用类型都是重新创建的。简单来说深拷贝就是进行了完全彻底的复制。 浅拷贝对基本数据类型进行拷贝时是值传递对引用数据类型进行拷贝时只是进行了引用传递没有真实创建新的对象。 二、深拷贝与浅拷贝的实现
深拷贝 Java中所有的对象都继承自Object类Object类中提供了一个方法供我们对Java对象进行拷贝clone()。要想成功调用这个方法首先该类要实现Cloneable接口并覆盖clone()方法。 深拷贝的实现过程如下 1实现Cloneable接口。 2覆盖Object类的clone()方法。 3在clone()方法中对基本类型数据进行值传递对引用类型数据创建一个新的对象并复制其内容。浅拷贝 Java中的浅拷贝则是仅对基本数据类型进行值传递对引用数据类型进行引用传递。当引用类型数据发生变化时浅拷贝的对象也会受到影响。 三、实例演示 下面通过一个具体的例子来演示深拷贝和浅拷贝的区别。 假设有一个Person类其中包含两个属性一个整数类型的基本数据类型变量a和一个String类型的引用数据类型变量b。
public class Person implements Cloneable {private int a;private String b;public Person(int a, String b) {this.a a;this.b b;}Overrideprotected Object clone() throws CloneNotSupportedException {Person clonedPerson (Person) super.clone();clonedPerson.a a; // 基本数据类型值传递clonedPerson.b (String) b.clone(); // 引用数据类型值传递return clonedPerson;}
}现在创建两个Person对象分别进行深拷贝和浅拷贝。
public class Main {public static void main(String[] args) throws CloneNotSupportedException {Person person1 new Person(1, Hello);Person person2 person1.clone();System.out.println(person1.a: person1.a);System.out.println(person2.a: person2.a);person1.b World;System.out.println(person1.b: person1.b);System.out.println(person2.b: person2.b);}
}运行结果如下
person1.a: 1
person2.a: 1
person1.b: World
person2.b: Hello从这个例子可以看出浅拷贝时person2的b属性受到了person1变化的影响而深拷贝时person2的b属性独立于person1变化不会相互影响。 总结 深拷贝和浅拷贝在Java中有着明显的区别。深拷贝进行了彻底的复制无论是基本数据类型还是引用数据类型都不会受到原对象的影响而浅拷贝则只是对基本数据类型进行值传递对引用数据类型进行引用传递导致对象间的关系仍然存在容易受到原对象的影响。在实际开发中我们需要根据不同的场景选择合适的拷贝方式以满足程序的设计需求。 来源Java技术栈公众号