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

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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值