[英]StringBuffer array fails where String works
我试图了解初始化Strings和StringBuffer之间的根本区别。以下代码可以正常工作。 (al是ArrayList<String>
)
String[] sa = new String[al.size()];
System.arraycopy(al.toArray(), 0, sa, 0, al.size());
但是,当我使用StringBuffer数组时,它将无法工作。
StringBuffer[] sa = new StringBuffer[al.size()];
System.arraycopy(al.toArray(), 0, sa, 0, al.size());
它给了我以下异常
java.lang.ArrayStoreException
at java.lang.System.arraycopy(Native Method)
at practice.ArrayListDemo.main(ArrayListDemo.java:34)
有人可以帮助我理解逻辑/原因吗? 字符串不可变如何产生影响尚不清楚。
您如何定义al? 是否具有正确的类型StringBuffer
? 当我执行以下操作时,没有问题:
List<StringBuffer> al = new ArrayList<StringBuffer>();
StringBuffer[] sa = new StringBuffer[al.size()];
System.arraycopy(al.toArray(), 0, sa, 0, al.size());
由于您已将al
声明为ArrayList<String>
,因此我们可以安全地假设您已在其中存储String
对象。
但在这儿
StringBuffer[] sa = new StringBuffer[al.size()];
System.arraycopy(al.toArray(), 0, sa, 0, al.size());
您正在尝试在StringBuffer
数组中复制String
元素。 这不起作用,因为String
不是StringBuffer
的子类型。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.