Arrays类:copyOf()、copyOfRange()
System类:arraycopy()
Object类:clone()
一、public static int[] copyOf(int[] original, int newLength)
产生一个新数组,新数组的长度任意,故newLength可以是:
1.大于原数组
当新数组的长度大于原数组,则新数组复制完原数组以后在后面补默认值
2.小于原数组
复制原数组的前newLength项
3.为0
产生一个类型相同的空数组,长度为0
int[] nums = {-10, -3, 1, 5, 9};
int[] nums1= Arrays.copyOf(nums, 0);
二、public static T[] copyOfRange(T[] original, int from, int to)
产生一个新数组,新数组的长度任意。与python中range一样,包含左不包含右。
1.右边界等于左边界
返回一个与原数组类型的空数组,长度为0
2.右边界大于原数组长度
复制完原数组的数据后在后面补默认值
3.0<=from<to<=original.length
三、public static native void arraycopy(Object src, int srcPos,Object dest, int destPos, int length);
因为是在已存在的两个数组间进行复制,故对参数的要求严格,不能越界。
srcPos + length <= src.length
destPos + length <= src.length
int[] nums = {1,2,3,4,5,6};
int[] nums1= {6,7,8,9,0};
System.arraycopy(nums,2,nums1,2,2);
四、clone()
clone是object类的方法,使用一段新的内存复制原来的数组产生一个新数组,新数组之前可以是存在的如nums1,也可以是不存在的如nums2
public class Test {
public static void main(String[] args) {
int[] nums = {1, 2, 3, 4, 5, 6};
int[] nums1 = {9, 8, 7};
System.out.println(nums1.length);//3
nums1 = nums.clone();
System.out.println(nums1.length);//6
System.out.println(nums == nums1);//false
System.out.println(nums.equals(nums1));//false
for (int i = 0; i < nums1.length; i++) {
System.out.print(nums1[i] + " ");//1 2 3 4 5 6
}
System.out.println();
int[] nums2 = nums.clone();
System.out.println(nums1 == nums2);//false
System.out.println(nums1.equals(nums2));//false
nums1 = nums;
System.out.println(nums1 == nums);//true
System.out.println(nums1.equals(nums));//true
}
}