Java 如何复制对象

Python014

Java 如何复制对象,第1张

可以使用clone来实现,clone用于为引用类型的复制

1.使用clone方法的类必须先实现Cloneable接口,不然clone方法会直接返回CloneNotSupportedException不支持克隆的异常

2、实现Cloneable接口的类应该使用公共方法重写 Object.clone(它是受保护的)。某个对象实现了此接口就克隆它是不可能的。即使 clone 方法是反射性调用的,也无法保证它将获得成功。

3、在Java.lang.Object类中克隆方法是这么定义的:

protected Object clone()

throws CloneNotSupportedException

创建并返回此对象的一个副本。表明是一个受保护的方法,同一个包中可见。

最简单的一种就是直接挨个把原数组的值赋给新数组 不过一般都用System.arraycopy(原数组起始复制的标号,新数组接收复制的起始标号,赋值的长度) 这个方法

例如:public class llx {public static void main(String args[]) {int a[] = {1,2,3,4,5} int b[] = new int[10]//搞一个10位置的新数组System.arraycopy(a[0],b[0],a.length)//从a的第一个位置开始复制;从b的第一个位置开始接收;一共接收a的总长度(a.length);;;懂了吗?这样的话 b的前5个值就被传递了,但是后5个是初始值0。}}

1.for循环方法:

代码灵活,但效率低。

2.System.arraycopy()方法:

通过源码可以看到,其为native方法,即原生态方法。自然效率更高。

1 public static native void arraycopy(Object src, int srcPos,

2 Object dest, int destPos,

3 int length)

3.Arrays.copyOf()方法:

同样看源码,它的实现还是基于System.arraycopy(),所以效率自然低于System.arraycpoy()。

复制代码

1 public static int[] copyOf(int[] original, int newLength) {

2 int[] copy = new int[newLength]

3 System.arraycopy(original, 0, copy, 0,

4 Math.min(original.length, newLength))

5 return copy

6 }

复制代码

4.Object.clone()方法:

从源码来看同样也是native方法,但返回为Object类型,所以赋值时将发生强转,所以效率不如之前两种。

1 protected native Object clone() throws CloneNotSupportedException