我试图理解初始化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)
有人可以帮我理解逻辑/原因吗?目前尚不清楚字符串是不可变的如何产生影响。
答案 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
的子类型,因此无法正常工作。