Arrays.copyOf 和 System.arraycopy
1)二者有何不同?
System.arraycopy()方法
System.arraycopy(Object src, int srcPos, Object dest, int destPos, int length);
- 需主动创建目标对象dest
- 可定义起始元素,灵活拷贝元素
- 比较重要的一点:native方法,性能好
Arrays.copyOf()方法
Arrays.copyOf(Object[] original, int newLength)
- copyOf方法中调用了System.arraycopy()这个方法
- 适合不创建目标对象的情况,主动创建新数组
2)深拷贝or 浅拷贝 ?
只有一维数组,且元素类型为 基本数据类型、包装类(基本数据类型的 引用类型)或String类时,使用Arrays.copyOf 属于 深拷贝;其他皆为浅拷贝
对于二维数组,归为其他,使用Arrays.copyOf 属于浅拷贝,只拷贝了元素的地址。故当对拷贝后数据进行修改,被拷贝对象的数据也就改变了。