java - 数组索引越界异常java

标签 java arrays exception

以下代码抛出数组索引超出绑定(bind)异常。我已将大小初始化为 1000,但尚未完全利用。未使用的索引值到底是多少?

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

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

最佳答案

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

Encodes this String into a sequence of bytes using the given charset, storing the result into a new byte array.

在您的情况下,它的长度等于字符串的长度(13 个字节),并且无论如何都小于 30。这就是您在尝试获取第 30 个元素时出现此异常的原因。

如果你需要用一个你从字符串变成的数组来初始化你的缓冲区变量,你需要使用System#arraycopy方法:

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

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

关于java - 数组索引越界异常java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32983399/

相关文章:

arrays - 找到分离数组的方法,使每个子数组的总和小于或等于一个数字

java - 有异常的返回类型是好的编程吗?

java - 空格会影响正则表达式的结果吗 ـــــ java

java - Calendar.MINUTE 给出不带前导零的分钟

当索引大于数组长度时,Javascript 循环回到数组开头

java - 是否可以在 Linux 上模拟 Java 中的文件创建异常?

Java:通用类异常

java - Tomcat 使用 Jersey Jax-RS 在单个服务器上每秒执行 15K 请求

java - 如何在这个素数生成器中实现数字序列?

python - 如何使用基本操作更改列表中的值?