在Java面向对象编程(OOP)中,类复制构造函数用于创建一个新对象,该对象是现有对象的副本。当涉及到数组作为参数传递时,需要特别注意数组的深拷贝和浅拷贝问题。
浅拷贝(Shallow Copy):
深拷贝(Deep Copy):
int[]
或 String[]
。MyClass[]
,其中 MyClass
包含可变字段。假设我们有一个类 MyClass
,其中包含一个可变数组:
public class MyClass {
private int[] data;
// 构造函数
public MyClass(int[] data) {
this.data = data;
}
// 复制构造函数(浅拷贝)
public MyClass(MyClass other) {
this.data = other.data; // 浅拷贝
}
// 复制构造函数(深拷贝)
public MyClass(MyClass other) {
this.data = new int[other.data.length];
System.arraycopy(other.data, 0, this.data, 0, other.data.length); // 深拷贝
}
// 获取数据
public int[] getData() {
return data;
}
// 设置数据
public void setData(int[] data) {
this.data = data;
}
}
问题:使用浅拷贝时,修改副本中的数组会影响原始对象。
原因:
解决方法:
System.arraycopy
或手动复制数组元素来创建独立的数据副本。public class MyClass {
private int[] data;
// 构造函数
public MyClass(int[] data) {
this.data = data;
}
// 复制构造函数(深拷贝)
public MyClass(MyClass other) {
this.data = new int[other.data.length];
System.arraycopy(other.data, 0, this.data, 0, other.data.length);
}
// 获取数据
public int[] getData() {
return data;
}
// 设置数据
public void setData(int[] data) {
this.data = data;
}
}
通过这种方式,可以确保在复制对象时,数组数据是独立的,不会相互影响。
没有搜到相关的文章