Arrays.copyOf方法

所见即所得,走起:

1.基本数据类型

private static void copyP() {
		int [] arr  = {1,2,3,4};
		int[] copyOf1 = Arrays.copyOf(arr, 2);
		int[] copyOf2 = Arrays.copyOf(arr, 4);
		int[] copyOf3 = Arrays.copyOf(arr, 6);
		System.out.println(Arrays.toString(copyOf1));
		System.out.println(Arrays.toString(copyOf2));
		System.out.println(Arrays.toString(copyOf3));
	}

打印结果:

[1, 2]
[1, 2, 3, 4]
[1, 2, 3, 4, 0, 0]

 

2.引用数据类型

private static void copyNotP() {
		MyClass [] arr  = {new MyClass(),new MyClass(),new MyClass(),new MyClass()};
		MyClass[] copyOf1 = Arrays.copyOf(arr, 2);
		MyClass[] copyOf2 = Arrays.copyOf(arr, 4);
		MyClass[] copyOf3 = Arrays.copyOf(arr, 6);
		System.out.println(Arrays.toString(copyOf1));
		System.out.println(Arrays.toString(copyOf2));
		System.out.println(Arrays.toString(copyOf3));
		
	}

打印结果:

[MyClass@15db9742, MyClass@6d06d69c]
[MyClass@15db9742, MyClass@6d06d69c, MyClass@7852e922, MyClass@4e25154f]
[MyClass@15db9742, MyClass@6d06d69c, MyClass@7852e922, MyClass@4e25154f, null, null]

结论:

将原数组拷贝一定长度到新数组,如果长度过长,会给出初始值占位.

arrays.copyOf是Java中的一个方法,用于复制一个数组。 它的源码如下: ```java public static <T> T[] copyOf(T[] original, int newLength) { return (T[]) copyOf(original, newLength, original.getClass()); } public static <T, U> T[] copyOf(U[] original, int newLength, Class<? extends T[]> newType) { T[] copy = ((Object)newType == (Object)Object[].class) ? (T[]) new Object[newLength] : (T[]) Array.newInstance(newType.getComponentType(), newLength); System.arraycopy(original, 0, copy, 0, Math.min(original.length, newLength)); return copy; } ``` 首先,copyOf方法是一个重载的方法,它有两个版本。第一个版本传入两个参数,分别是原始数组和新数组的长度。第二个版本传入三个参数,分别是原始数组,新数组的长度以及新数组的类型。 在第一个版本中,方法内部调用了第二个版本的方法,并且将原始数组的类型传递给了新数组的类型。 在第二个版本中,根据新数组的类型创建了一个新的数组对象copy。如果新数组的类型是Object数组,则直接创建一个新的Object数组;如果新数组的类型不是Object数组,则通过Array.newInstance方法创建指定类型的新数组。 然后,使用System.arraycopy方法将原始数组的元素复制到新数组中。该方法会复制原始数组的前Math.min(original.length, newLength)个元素,确保不会超出新数组的长度。 最后,将复制后的数组返回。 总结来说,arrays.copyOf方法就是根据给定的原始数组和长度复制出一个新的数组,并返回该新数组。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值