2014-09-20 44 views
0

我想了解初始化字符串和StringBuffer之間的根本區別 以下代碼正常工作。 (al是一個ArrayList<String>StringBuffer數組失敗,其中字符串工作

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

不變性與它無關。您正在嘗試混合使用數組類型。 – chrylis 2014-09-20 23:22:48

回答

3

你是怎麼定義al的?它是否與正確的類型 - StringBuffer?當我做了以下沒有問題:

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

不,我犯了一個錯誤。我的數組列表被初始化爲String。 – 2014-09-20 23:25:00

+0

很高興解決,享受! – 2014-09-20 23:35:04

2

既然你已經聲明al作爲ArrayList<String>,我們可以放心地假設你已經存儲在它String對象。

但這裏

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

你想在一個StringBuffer陣列複製String元素。這是行不通的,因爲String不是StringBuffer的子類型。

+0

是的,非常感謝。我只是明白arraycopy方法拋出異常類型不匹配。 – 2014-09-20 23:23:47

+0

+1這是提供解決方案背後的實際推理的唯一答案。 – Azar 2014-09-20 23:25:04