如果我有一个以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
}
答案 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 []是对象。尝试明确投射。您可能需要迭代并转换每个元素并插入到新数组中。