【java面试题】- java深拷贝和浅拷贝区别?什么是引用拷贝?

简介: java深拷贝和浅拷贝区别?什么是引用拷贝?

1. 浅拷贝(Shallow Copy): 浅拷贝是一种拷贝方式,只复制对象的引用,而不复制对象本身。换句话说,它创建了一个新的对象,但并没有创建原始对象内部对象的新实例。因此,原始对象和复制的对象共享相同的内部对象,这意味着对一个对象内部对象的修改会影响到另一个对象。

2. 深拷贝(Deep Copy): 深拷贝是一种拷贝方式,不仅复制对象的引用,还复制对象本身。这意味着为原始对象内部的所有对象分配了新的内存空间,创建了完全独立的副本。因此,对一个对象内部对象的修改不会影响到另一个对象。

3. 引用拷贝: 引用拷贝是一种情况,其中一个变量被赋值给另一个变量,而两个变量都引用相同的内存位置。这意味着通过一个变量对对象进行的修改将反映在另一个变量中,因为它们都指向内存中的同一个对象。

下面是上述概念的代码示例:

// 浅拷贝示例classStudent {
intid;
Stringname;
Student(intid, Stringname) {
this.id=id;
this.name=name;
    }
}
publicstaticvoidmain(String[] args) {
Studentstudent1=newStudent(1, "Alice");
Studentstudent2=student1; // 浅拷贝student2.name="Bob"; // student1和student2的name都变为"Bob"System.out.println(student1.name); // 输出:BobSystem.out.println(student2.name); // 输出:Bob}
// 深拷贝示例(使用Cloneable)classPersonimplementsCloneable {
intage;
Stringname;
Person(intage, Stringname) {
this.age=age;
this.name=name;
    }
@OverrideprotectedObjectclone() throwsCloneNotSupportedException {
returnsuper.clone();
    }
}
publicstaticvoidmain(String[] args) throwsCloneNotSupportedException {
Personperson1=newPerson(25, "Alice");
Personperson2= (Person) person1.clone(); // 深拷贝person2.name="Bob"; // 修改不会影响person1System.out.println(person1.name); // 输出:AliceSystem.out.println(person2.name); // 输出:Bob}

在浅拷贝示例中,student1 和 student2 引用同一个 Student 对象,所以对一个对象的修改会反映在另一个对象上。而在深拷贝示例中,person1 和 person2 是两个独立的 Person 对象,所以对一个对象的修改不会影响到另一个对象。

目录
相关文章
|
8天前
|
缓存 Java 数据库连接
java面试题目 强引用、软引用、弱引用、幻象引用有什么区别?具体使用场景是什么?
【6月更文挑战第28天】在 Java 中,理解和正确使用各种引用类型(强引用、软引用、弱引用、幻象引用)对有效的内存管理和垃圾回收至关重要。下面我们详细解读这些引用类型的区别及其具体使用场景。
17 3
|
13天前
|
Java
java方法引用::
java方法引用::
15 3
|
16天前
|
Java
“深入探讨Java中的对象拷贝:浅拷贝与深拷贝的差异与应用“
“深入探讨Java中的对象拷贝:浅拷贝与深拷贝的差异与应用“
|
10天前
|
存储 Dubbo Java
一篇文章讲明白Java的深拷贝和浅拷贝
一篇文章讲明白Java的深拷贝和浅拷贝
15 0
|
13天前
|
Java
java使用FileChannel的transferTo方法拷贝大于2G文件
java使用FileChannel的transferTo方法拷贝大于2G文件
12 0
|
2月前
|
存储 Java 索引
Java一维数组元素的引用与操作技术详解
Java一维数组元素的引用与操作技术详解
29 1
|
2月前
|
存储 Java 索引
Java的数组定义与引用
Java的数组定义与引用
|
2月前
|
存储 Java 索引
Java二维数组的引用与操作技术详解
Java二维数组的引用与操作技术详解
22 0
|
2月前
|
Java
<Java SE> 数组详解大全(附带练习题).一维数组、二维数组、数组拷贝、数组遍历...
<Java SE> 数组详解大全(附带练习题).一维数组、二维数组、数组拷贝、数组遍历
23 0
|
10月前
|
存储 Java 程序员
Java面试题日积月累(数据库30道)
Java面试题日积月累(数据库30道)
48 0