如何在Java中将浮点数组转换为双精度数组?

2022-09-01 22:44:46

我有一个浮点数组,我想在Java中将其转换为双精度数组。我知道迭代数组并创建一个新数组的明显方法。我期望Java能够顺利地消化浮点数[],它希望与double[]一起使用...但它不能与此一起工作。进行此转换的优雅,有效的方法是什么?


答案 1

基本上,必须对每个值进行转换。两种数组类型之间没有隐式转换,因为在 JITting 之后用于处理它们的代码会有所不同 - 它们具有不同的元素大小,浮点数需要转换,而双精度不需要。将此与引用类型的数组协方差进行比较,在引用类型中,读取数据时不需要转换(例如,String 引用的位模式与 Object 引用的位模式相同),并且所有引用类型的元素大小都相同。

简而言之,某些东西必须在循环中执行转换。我不知道有任何内置方法可以做到这一点。我确信它们存在于某个地方的第三方库中,但除非你碰巧已经使用了其中一个库,否则我只会编写自己的方法。为方便起见,下面是一个示例实现:

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;
}

答案 2

在Java 8中,如果你真的想,你可以这样做:

IntStream.range(0, floatArray.length).mapToDouble(i -> floatArray[i]).toArray();

但是最好(更干净,更快,更好的语义)使用Jon Skeet的功能。