Vis*_*l S 2 java arrays exception
以下代码抛出数组索引超出绑定的异常.我初始化了1000的大小但尚未充分利用.未使用的指数的确切值是多少?
byte[] buffer=new byte[1000];
String s="i am a stupid";
buffer=s.getBytes();
System.out.println(buffer[30]);
Run Code Online (Sandbox Code Playgroud)
当您调用该String#getBytes
方法时,您将获得一个新数组,初始化时的长度等于表示该字符串所需的字节数.由于Java文档:
使用给定的字符集将此String编码为字节序列,将结果存储到新的字节数组中.
在你的情况下,它的长度等于字符串的长度(13个字节),并且它总是小于30.这就是你在尝试获得第30个元素时获得此异常的原因.
如果需要使用数组初始化缓冲区变量,则需要使用System#arraycopy方法:
byte[] byteAr = s.getBytes();
System.arraycopy(byteAr, 0, buffer, 0, byteAr.length);
Run Code Online (Sandbox Code Playgroud)
如果您想知道,默认情况下用于初始化数组的值是什么,因此它是数组所包含的数据类型的默认值.如果是字节,则默认值为0.