关于Java中的数组复制函数System.arraycopy()
System.arraycopy()是Java系统提供的用于数组复制的函数。了解该函数前,先了解以下概念。
1、Java中的深复制和浅复制:
深复制:可以复制对象的内容和引用。例如:值拷贝。
浅复制:仅复制对象的引用。例如:对象拷贝(拷贝的是地址)。
2、函数原型:
public static native void arraycopy(Object src, int srcPos, Object dst, int dstPos, int length); src:原数组对象 srcPos:copy的起始位置 dst:目标数组对象 dstPos:copy到目标的起始位置 length:copy的长度
arraycopy()是System提供一个native静态方法,用于数组之间的复制。根据数据中数据类型的不同进行不同的处理,分为值拷贝(基本类型)和对象拷贝(普通类型,即对象类型)
该方法针对数据类型为基本类型的一维数组进行的是深复制;而二维数组或数据为引用类型的一维数据来说,进行的是浅复制。【因二维数组的元素类型是数组类型,而数组类型也是引用类型】
由于上述方法是在JVM中直接执行的,因此其比for循环和clone更加高效。
3、Java中复制数组的几种方法:
(1)for遍历
(2)数组clone():
int[]a = new int[]{1,2,3}; int[]b = a.clone();
(3)System.arraycopy()
(4)Arrays.copyof():源码中,实际最终调用的还是System.arraycopy()。
4、补充:
若自定义一个类,想调用Object的super.clone()方法,则该类必须实现Cloneable接口。
// Object.java源码如下: protected Object clone() throws CloneNotSupportedException { if (!(this instanceof Cloneable)) { //非Cloneable实例,抛出异常 throw new CloneNotSupportedException("Class " + getClass().getName() + " doesn't implement Cloneable"); } return internalClone(); //native方法 } private native Object internalClone();
5、Java设计模式中的"原型模式"会用到上述clone()。
posted on 2019-07-30 18:04 Android之路 阅读(1602) 评论(0) 编辑 收藏 举报