System.arraycopy() 基本类型是深拷贝,引用类型来说是浅拷贝对吗
时间: 2023-07-08 18:38:07 浏览: 40
`System.arraycopy()`方法是将原数组中的数据复制到目标数组中,对于基本数据类型,确实是深拷贝(即复制了原数组中的数据到目标数组中)。但是对于引用类型,`System.arraycopy()`方法只是复制了引用而已,也就是说,复制后的目标数组中的元素和原数组中的元素指向的是同一个对象。因此,对于引用类型,`System.arraycopy()`方法只是浅拷贝。
举个例子,假设我们有一个原数组`orig`和一个目标数组`dest`,其中`orig`数组中的元素是一个引用类型的对象。如果我们使用`System.arraycopy()`方法将`orig`复制到`dest`中,那么`dest`中的元素和`orig`中的元素指向的是同一个对象。如果我们修改了`dest`中的元素,那么`orig`中的元素也会受到影响。
```java
class MyClass {
int value;
public MyClass(int value) {
this.value = value;
}
}
MyClass[] orig = new MyClass[] { new MyClass(1), new MyClass(2), new MyClass(3) };
MyClass[] dest = new MyClass[3];
System.arraycopy(orig, 0, dest, 0, 3);
// 修改dest中的元素
dest[0].value = 100;
// 输出orig中的元素
System.out.println(orig[0].value); // 输出100
```
在上面的例子中,我们将`orig`复制到`dest`中,然后修改了`dest`中的第一个元素。最后输出`orig`中的第一个元素,发现它的值也变成了100。这是因为`orig`中的元素和`dest`中的元素指向的是同一个对象,所以修改`dest`中的元素也会影响到`orig`中的元素。