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



我正在努力理解初始化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的子类型。

最新更新