System.arraycopy获取java.lang.ArrayIndexOutOfBoundsException

时间:2011-09-15 15:04:15

标签: java arrays

System.arraycopy获取java.lang.ArrayIndexOutOfBoundsException ..我试图将数据从一个数组复制到下一个数组。但我得到了例外

private String array[] = { "NO DATA YET" };


 private void setListData()
    {
        String array2[] = { "Iphone", "Tutorials", "Gallery", "Android",    "item 1", "item 2", "item3", "item 4" };
        System.arraycopy(array2, 0, array, 0, array2.length);
    }

4 个答案:

答案 0 :(得分:7)

你试图将8个项目复制到长度为1的数组中。你不能这样做。

来自the documentation

  

否则,如果满足以下任何条件,则抛出IndexOutOfBoundsException并且不修改目标:

     
      
  • srcPos参数为负数。
  •   
  • destPos参数为负数。
  •   
  • 长度参数为负数。
  •   
  • srcPos + length大于src.length,即源数组的长度。
  •   
  • destPos + length大于dest.length,即目标数组的长度。
  •   

在这种情况下,destPos + length为8,dest.length为1,因此抛出异常。

请注意,Java中的数组具有固定长度。如果您需要可扩展容器,请查看ArrayList

答案 1 :(得分:1)

因为array的长度是1。

声明array[] = { "NO DATA YET" };创建一个长度为1的数组,其中包含一个项目。

而是将目标数组声明为:

private String array[] = new String[8];

答案 2 :(得分:1)

数组的长度只有1,你试图从array2复制8个东西。尝试使用ArrayList或随着需要增长而增长的东西。

答案 3 :(得分:0)

解决所有类型的ARRAYINDEXOUTOFBOUNDS例外的方法:

借助面向ArrayIndexOutOfBoundsException的以下示例了解此内容:

public static void main(String [] args){
     String dest[] = { "Iphone", "Tutorials", "Gallery", "Android",    "item 1", "item 2", "item3", "item 4" };
        String src[]=new String[8];
        System.arraycopy(src, 0, dest, 1, src.length);
        System.out.println(dest[4]);
}

上述情况的解决方案可以是以下任意一种: 1。要么增加目标数组的大小,以便可以找到位置。 2。。由于我们从索引1开始,因此您只能从源数组中复制7个元素。 3。。或者,您可以从目标数组中的索引0开始复制,以便它可以容纳源数组的所有数组元素。