2

如果我有一个以 adouble作为参数的函数,我可以轻松地放入 a float

但是,当我有一个需要 a 的函数时,double[]我无法通过 a 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

4 回答 4

2

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

于 2014-03-07T14:27:57.543 回答
2

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

于 2014-03-07T14:30:31.593 回答
2

Afloat是4字节类型,adouble是8字节类型。将单个float扩展为 adouble是一个恒定时间操作。但是,将 a 扩大float[]到 adouble[]必须进行完整的复制,并且需要花费线性时间来扩大整个数组。所以 Java 不会隐式执行它——它不会假装该操作与 O(1) 操作一样便宜。

于 2014-03-07T14:36:21.843 回答
0

那是因为浮点数和双精度数是原语。浮点数可以自动转换为双精度数。但是, double[] 和 float[] 是对象。尝试显式转换。您可能需要迭代和转换每个元素并插入到新数组中。

于 2014-03-07T14:29:36.420 回答