如何对引用类型的变量进行拷贝
时间: 2024-09-13 12:18:52 浏览: 72
引用类型的变量拷贝可以分为浅拷贝(Shallow Copy)和深拷贝(Deep Copy)两种方式:
1. 浅拷贝:指的是创建一个新对象,这个对象的类型和原有对象的类型相同,但是新对象的引用指向的内容是和原有对象一样的。也就是说,浅拷贝只复制引用本身,而不复制引用指向的对象。在Java中,可以通过clone方法实现浅拷贝,但是前提是类需要实现Cloneable接口并重写Object类的clone方法。
```java
public class ShallowCopyExample {
public static void main(String[] args) throws CloneNotSupportedException {
MyClass original = new MyClass();
original.data = new int[]{1, 2, 3};
MyClass shallowCopy = (MyClass) original.clone();
// 浅拷贝后,shallowCopy和original的数据字段指向同一个对象
}
}
class MyClass implements Cloneable {
int[] data;
@Override
protected Object clone() throws CloneNotSupportedException {
return super.clone();
}
}
```
2. 深拷贝:指的是创建一个新对象,然后复制原有对象的引用指向的所有对象。深拷贝会复制引用和引用指向的对象,因此新对象和原有对象是完全独立的。在Java中,可以通过实现一个复制构造函数或者重写clone方法,并在其中对引用的对象进行逐个拷贝来实现深拷贝。
```java
public class DeepCopyExample {
public static void main(String[] args) {
MyClass original = new MyClass();
original.data = new int[]{1, 2, 3};
MyClass deepCopy = new MyClass(original);
// 深拷贝后,deepCopy和original的数据字段指向不同的对象
}
}
class MyClass {
int[] data;
public MyClass() {
}
public MyClass(MyClass other) {
this.data = other.data.clone();
}
}
```
阅读全文