Ответ 1
В основном что-то должно делать преобразование каждого значения. Не существует неявного преобразования между двумя типами массивов, потому что код, используемый для их обработки после JITting, будет другим - у них есть другой размер элемента, и для float потребуется преобразование, тогда как double не будет. Сравните это с ковариацией массива для ссылочных типов, где при чтении данных не требуется преобразований (например, шаблон бит одинаковый для ссылки на String в качестве ссылки на объект), а размер элемента одинаковый для всех ссылочных типов.
Короче говоря, что-то должно будет выполнять преобразования в цикле. Я не знаю никаких встроенных методов для этого. Я уверен, что они существуют в сторонних библиотеках где-то, но если вы не используете одну из этих библиотек, я просто напишу свой собственный метод. Для удобства здесь приведен пример реализации:
public static double[] convertFloatsToDoubles(float[] input)
{
if (input == null)
{
return null; // Or throw an exception - your choice
}
double[] output = new double[input.length];
for (int i = 0; i < input.length; i++)
{
output[i] = input[i];
}
return output;
}