在刚学习Java时 学到了复制数组的copyOfRange()方法.
import java.util.Arrays;
public class CopyArray
{
public static void main(String[] args)
{
int arr1[] = new int[]{1,2,3,4,5};
int arr2[] = new int[1];
arr2 =Arrays.copyOfRange(arr1,0, 100);
for(int x:arr1)
{
System.out.print(x+" ");
}
System.out.println();
for(int x : arr2)
{
System.out.print(x+" ");
}
}
}
上面是我用这个方法时写的,我原本以为数组arr1在没有上限到100的大小会报错, 同时数组arr2的大小也只有1不足以放下arr1[0-100]的的数字。
我想应该是会抛出异常的,但是在写完之后,编译并没有报错,运行结果如下:
后来在别人的建议下我看了源代码,才知道了原因
public static int[] copyOfRange(int[] original, int from, int to) {
int newLength = to - from;//一共要copy多少个元素
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));使用System.arraycory方法来进行copy
return copy;
}
原来这个方法是创建新的数组copy[]来放下arrr1[]的值大小为:newLength = to - from. 最后直接返回的是这个新的数组,方法调用后此时的arr2就会是copy[],而并不是原来那个大小只有1的数组.
PS:通过这次遇到的疑惑,以后遇到不解的地方查看源代码是很不错的方法.