2009-06-24 16 views
1

Warum wirft der folgende Code ArrayStoreException?Unerwartete ArrayStoreException

double[] a = {2.0,3.4,3.6,2.7,5.6}; 
int[] b = {2,3,4,5}; 
System.arraycopy(b,0,a,1,4); 
+8

Wenn Sie behaupten, dass Ihr Code eine Ausnahme auslöst, sollten Sie mindestens den kompilierten Code posten. –

+0

+1. jemand bearbeitet das, um wenigstens double [] a und int [] b zu sagen – Gandalf

+0

Warum die downvotes? Er hat einen Code geschrieben !!!!! –

Antwort

11

Aus der Dokumentation für System.arraycopy:

Andernfalls, wenn eine der folgenden wahr ist, wird ein Arrays geworfen und das Ziel nicht geändert:

[...]

das src Argument und dest Argument verweisen zu Arrays, deren Komponententypen verschiedene primitive Typen sind.

Das ist genau der Fall hier - int und double sind verschiedene primitive Typen, also die Ausnahme als dokumentiert geworfen.

Der Punkt von arraycopy ist, dass es blendend schnell arbeiten kann, indem es die Rohdaten blind kopiert, ohne irgendwelche Umwandlungen anwenden zu müssen. In Ihrem Fall würde Konvertierungen anwenden müssen, so dass es fehlschlägt.

0

versuchen doppelt ** [] ** a = {2.0,3.4,3.6,2.7,5.6}; und int ** [] ** b

3

Ja, das ist das dokumentierte Verhalten für ein arraycopy zwischen Arrays mit verschiedenen Grundtypen als Komponenten. Ob der Typ normalerweise gefördert werden kann, ist nicht relevant. Dies ist, was arraycopy entworfen ist zu tun.

0

Es gibt keine automatische Konvertierung zwischen int und double Elementen im Array mit arraycopy(). Die systemeigene Methode überprüft die Äquivalenz des Array-Typs und löst die ArrayStoreException bei Nichtübereinstimmung aus. Sie werden auf die Ebene oder die Methode von looping zurückkehren haben:

for (int i = 0; i < a.length(); i++) 
    a[i] = b[i];