Arrays.copyOf():
复制指定的数组内容以达到扩容的目的,该方法对不同的基本数据类型都有对应的重载方法
查看java.api可知:
第一个参数为扩容前的数组名称
第二个参数是扩容后的数组长度
public static <T> T[] copyOf(T[] original, int newLength) {
return (T[]) copyOf(original, newLength, original.getClass());
}
Arrays.copyOf返回的是新数组对象,它的数组对象是拷贝的源数组对象,不会修改原数组对象
System.arrayCopy():
是一个本地(native)方法
src:源对象
srcPos:源数组中的起始位置
dest:目标数组对象
destPos:目标数据中的起始位置
length:要拷贝的数组元素的数量
public static native void arraycopy(Object src, int srcPos,
Object dest, int destPos,
int length);
如果原数组是一个基本类型,不会改变原数组
如果原数组存的是对象的话,数组的每一个元素保存对象的引用,赋值之后,会改变原数组
总结:
java虚拟机栈帧中,只会直接为基本数据类型分配空间(比如 int ,String),然后直接将数据的值存在栈帧中,而对于对象,那么只会在栈帧中分配一个引用的大小,存储对象的引用