StringBuffer数组在String工作时失败

时间:2014-09-20 23:14:13

标签: java string exception stringbuffer

我试图理解初始化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)

有人可以帮我理解逻辑/原因吗?目前尚不清楚字符串是不可变的如何产生影响。

2 个答案:

答案 0 :(得分:3)

你是如何定义的?是否使用了正确的类型 - StringBuffer?当我做了以下操作时没有问题:

    List<StringBuffer> al = new ArrayList<StringBuffer>();
    StringBuffer[] sa = new StringBuffer[al.size()];
    System.arraycopy(al.toArray(), 0, sa, 0, al.size());

答案 1 :(得分:2)

由于您已将al声明为ArrayList<String>,因此我们可以放心地假设您已将String个对象存储在其中。

但是这里

StringBuffer[] sa = new StringBuffer[al.size()];
System.arraycopy(al.toArray(), 0, sa, 0, al.size());

您尝试复制String数组中的StringBuffer元素。由于String不是StringBuffer的子类型,因此无法正常工作。