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