Java数组的复制Arrays.copyOf()、System.arraycopy()、nums.clone()

Java数组的复制Arrays.copyOf()、System.arraycopy()、nums.clone()

Arrays.copyOf()

可知其底层调用的是System.arraycopy。
其源码如下:

    public static int[] copyOf(int[] original, int newLength) {
        int[] copy = new int[newLength];
        System.arraycopy(original, 0, copy, 0,
                         Math.min(original.length, newLength));
        return copy;
    }

实例:

 int [] array=new int[]{0,0,1,1};
 int[] copy = Arrays.copyOf(array, array.length);
 System.out.println(array==copy);
 //false

使用场景,我们需要保留原数据,但需要排序后的数据

System.arraycopy()

System.arraycopy调用java内存模型中本地方法栈区

    public static native void arraycopy(Object src,  int  srcPos,
                                        Object dest, int destPos,
                                        int length);

.clone()

        int [] array=new int[]{0,0,1,1};
        int[] clone = array.clone();
        System.out.println(clone==array);
        //flase

从以上看出clone是创建了不同的对象,那么对于二维数组呢

        int [][] array=new int[][]{{0,0},{1,1}};
        int[][] arrays = array.clone();
        arrays[0][0]=1;
        System.out.println(array[0][0]);
        System.out.println(arrays[0]==array[0]);
        //1
        //true

所以在使用clone时,注意其是浅克隆,那么如何使用 遍历克隆

你可能感兴趣的:(面试相关)