初学Java遇到的一个数组小问题

来源:互联网 发布:系统还原的软件 编辑:程序博客网 时间:2024/05/21 20:25

在刚学习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]的的数字。
我想应该是会抛出异常的,但是在写完之后,编译并没有报错,运行结果如下:
第一行是arr1的数组,第二行是复制后的arr2
后来在别人的建议下我看了源代码,才知道了原因

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:通过这次遇到的疑惑,以后遇到不解的地方查看源代码是很不错的方法.

原创粉丝点击