Почему следующий код выдает ArrayStoreException?
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);
Из документов на System.arraycopy:
System.arraycopy
В противном случае, если любое из следующего true, исключение ArrayStoreException и пункт назначения не изменяется: [...] Аргумент src и аргумент dest ссылаются на массивы, чьи типы компонентов разные примитивные типы.
В противном случае, если любое из следующего true, исключение ArrayStoreException и пункт назначения не изменяется:
[...]
Аргумент src и аргумент dest ссылаются на массивы, чьи типы компонентов разные примитивные типы.
Это именно тот случай, когда int и double - это разные примитивные типы, поэтому исключение выдается, как описано.
int
double
Смысл arraycopy заключается в том, что он может работать ослепительно быстро, слепо копируя необработанные данные, без применения каких-либо преобразований. В вашем случае должен будет применить преобразования, поэтому он потерпит неудачу.
arraycopy
Да, это задокументированное поведение для arraycopy между массивами с различными примитивными типами в качестве компонентов. Вопрос о том, может ли тип обычно повышаться, не имеет значения; это то, для чего предназначен arraycopy.
Нет автоматического преобразования между int и двойными элементами в массиве с помощью arraycopy (). Нативный метод проверяет эквивалентность типа массива и выдает исключение ArrayStoreException. Вам придется вернуться к простой или метод цикла:
for (int i = 0; i < a.length(); i++) a[i] = b[i];
попробуйте дважды ** [] ** a = {2.0,3.4,3.6,2.7,5.6}; а также int ** [] ** b