繁体   English   中英

StringBuffer数组在String工作的地方失败

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM