简单概括
先上源码:
/**
* Arrays类的copyOf方法,本质上还是调用了底层C语言来实现的arraycopy方法
*/
public static char[] copyOf(char[] original, int newLength) {
char[] copy = new char[newLength];
System.arraycopy(original, 0, copy, 0,
Math.min(original.length, newLength));
return copy;
}
System.arraycopy的实现流程图大致如下
因为Java是调用底层C语言的方式实现的,我目前对C语言语法还不是很熟悉
因此暂时略过,以其他人的文章为主
深克隆还是浅克隆
直接上结论:
- Arrays.copyof方法是浅克隆,只复制了对象的引用(内存地址),并没有为每个元素创建新的对象
解析:
- 当克隆的是一个数组时,会创建一个新的数组
- 当数组中存储的是:基础类型 / String类数据时
- 需要修改其中的值时,如 a[1] = 1 或者a[1] = “string”
- 此时是赋值操作,会创建一个新的int / String对象,并返回它的引用
- 其结果是新数组的某个位置改变了对象的引用,不会对旧数组产生任何影响
当数组中存储的是:一个类的实例对象时
- System.arraycopy方法详解
- 深克隆还是浅克隆