为什么float适合double,但float []不适合double []?

时间:2014-03-07 14:25:41

标签: java floating-point floating-point-conversion

如果我有一个以double为参数的函数,我可以很容易地输入float

然而,当我有一个double[]的功能时,我无法通过float[]

public static void doSomethingWithMyDoubles(double[] doubles) {
    //....
}

public static void doSomethingWithMyDouble(double doubles) {
    //....
}

public static void main() {
    float floater = 10f;
    double doubler = 10d;

    doSomethingWithMyDouble(doubler) // OK
    doSomethingWithMyDouble(floater) // OK

    float[] floates = new float[10];
    double[] doubles = new double[10];

    doSomethingWithMyDoubles(doubles) // OK
    doSomethingWithMyDoubles(floates) // NOK
}

4 个答案:

答案 0 :(得分:2)

在Java中,数组不是原始数据类型;相反,它们属于Object类型。因此,您无法直接将一个基本类型的数组转换为另一个基本类型的数组(即使您可能将数组中的各个元素转换为另一个类型)。

答案 1 :(得分:2)

这是因为当您将float值传递给需要double的方法时会发生隐式类型转换。但是float []和double []数组之间没有类型转换。

答案 2 :(得分:2)

float是4字节类型,double是8字节类型。将单个float扩展为double是一个固定时间操作。但是,将float[]扩展为double[]必须执行完整复制,并且需要花费线性时间来扩展整个数组。所以Java不会隐式地做 - 它不会假装操作像O(1)操作一样便宜。

答案 3 :(得分:0)

这是因为float和double是原始的。浮子可以自动铸造成双打。但是,double []和float []是对象。尝试明确投射。您可能需要迭代并转换每个元素并插入到新数组中。