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);
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);
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.
versuchen doppelt ** [] ** a = {2.0,3.4,3.6,2.7,5.6}; und int ** [] ** b
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.
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];
Wenn Sie behaupten, dass Ihr Code eine Ausnahme auslöst, sollten Sie mindestens den kompilierten Code posten. –
+1. jemand bearbeitet das, um wenigstens double [] a und int [] b zu sagen – Gandalf
Warum die downvotes? Er hat einen Code geschrieben !!!!! –