1.循环赋值
循环赋值是Java数组复制的最简单的方法。
public class Main {
public static void main(String[] args) {
int[] array = {1,2,3,4};
int[] result = new int[array.length];
for (int i = 0; i < array.length; i++) {
result[i] = array[i]; //循环赋值
}
System.out.println(Arrays.toString(result)); //利用Arrays工具类的toString()静态方法输出result数组中的元素。
}
}
2.利用System类中的静态本地方法arraycopy() (浅复制)
该方法有五个参数,下面是源码
public static native void arraycopy(Object src, int srcPos,Object dest, int destPos,int length);
Object src:源数组
int srcPos:源数组要复制的开始位置
Object dest:目标数组
int destPos:目标数组放置的开始位置
int length:源数组要把多长的长度复制到目标数组
注意:src 和 dest都必须是同类型或者可以进行转换类型的数组
public class Main {
public static void main(String[] args) {
int[] array = {1,2,3,4};
int[] result = new int[array.length];
System.arraycopy(array,0,result,0,array.length);
System.out.println(Arrays.toString(result));
}
}
3.利用Arrays类中的copyOf()静态方法,Arrays.copyOf()
(浅复制)底层源码仍然调用 System.arraycopy()静态本地方法
如下是copyOf()方法的源码:第一个参数是要被复制的数组,第二个参数是复制被复制数组中的几个元素,默认从被复制数组索引为0的位置开始复制。
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;
}
public class Main {
public static void main(String[] args) {
int[] array = {1,2,3,4};
int[] result = Arrays.copyOf(array,array.length);
System.out.println(Arrays.toString(result));
}
}
4.利用Arrays类中的copyOf()静态方法,Arrays.copyOfRange()
(浅复制)底层源码仍然调用 System.arraycopy()静态本地方法
如下是copyOf()方法的源码:第一个参数是要被复制的数组,第二个参数是从哪里开始复制,第三个参数是到哪里停止。 [from,to)左闭右开区间。
public static int[] copyOfRange(int[] original, int from, int to) {
int newLength = to - from;
if (newLength < 0)
throw new IllegalArgumentException(from + " > " + to);
int[] copy = new int[newLength];
System.arraycopy(original, from, copy, 0,
Math.min(original.length - from, newLength));
return copy;
}
public class Main {
public static void main(String[] args) {
int[] array = {1,2,3,4};
int[] result = Arrays.copyOfRange(array,0,array.length);
System.out.println(Arrays.toString(result));
}
}
5.Object.clone() protected native 受保护的本地方法
首先要明确clone()方法比较特殊,它是Object类中的方法,对于对象而言,它是深拷贝,但是对于数组而言,它是浅拷贝。
protected native Object clone() throws CloneNotSupportedException;
public class Main {
public static void main(String[] args) {
int[] array = {1,2,3,4};
int[] result = array.clone();
System.out.println(Arrays.toString(result));
}
}
本文详细介绍了Java中四种常见的数组复制方法:1) 循环赋值,通过for循环逐个元素复制;2) 利用System.arraycopy()进行浅复制;3) 使用Arrays.copyOf()进行数组复制;4) 通过Arrays.copyOfRange()复制数组的一部分;5) 调用Object.clone()进行浅拷贝。这些方法各有特点,适用于不同的场景。
8856

被折叠的 条评论
为什么被折叠?



