数组索引超出绑定异常java

时间:2015-10-07 03:37:51

标签: java arrays exception

以下代码抛出数组索引超出绑定的异常。我初始化了1000的大小但尚未充分利用。未使用的指数的确切值是什么?

byte[] buffer=new byte[1000];
     String s="i am a stupid";
     buffer=s.getBytes();

     System.out.println(buffer[30]);

3 个答案:

答案 0 :(得分:5)

当你调用String#getBytes方法时,你得到一个新数组,初始化的长度等于表示字符串所需的字节数。由于Java docs

  

使用给定的字符集将此String编码为字节序列,并将结果存储到新的字节数组中。

在你的情况下,它的长度等于字符串的长度(13个字节),并且它总是小于30。这就是你在尝试获得第30个元素时获得此异常的原因。

如果需要使用数组初始化缓冲区变量,则需要使用System#arraycopy方法:

byte[] byteAr = s.getBytes();
System.arraycopy(byteAr, 0, buffer, 0, byteAr.length);

如果您想知道,默认情况下用于初始化数组的值是什么,因此它是数组所包​​含的数据类型的默认值。如果是字节,则默认值为0.

答案 1 :(得分:2)

因为buffer=s.getBytes();不使用您刚刚分配的数组。它使buffer引用一个全新的数组,在你的例子中不会有30个成员。

答案 2 :(得分:1)

重新分配参考时,无法再访问您分配的buffer。我想你想使用System.arraycopy(Object src, int srcPos, Object dest, int destPos, int length)喜欢

byte[] buffer=new byte[1000];
String s="i am a stupid";
byte[] bytes=s.getBytes();
System.arraycopy(bytes, 0, buffer, 0, bytes.length);

请注意,buffer[30]默认值为0