我有这个片段:
static class Foo {
Double[] array;
Double value;
public Foo(Double[] array) {
this.array = array;
}
Foo(double value){
this.value = value;
}
}
public static void main(String[] args) {
double[] array = new double[]{1,2,3,4,5,6,7};
double value = 10;
new Foo(value); //this is normal
new Foo(array); //syntax error cannot resolve constructor Foo(double[])
}
我收到语法错误
无法解析构造函数' Foo(double [])'
为什么我可以将double
类型的变量传递给接收Double
的方法,但是我无法传递{{1}类型的数组接收double[]
作为参数
答案 0 :(得分:4)
因为double
是原始的而Double
不是原始的。因此,当您指定原始vs Wrapper装箱/拆箱工作时。但整个阵列都没有这样的机制。
并且double[]
在初始化时根本没有空值,因为它们包含基元,其中Double[]
可以保存空值,并且它们不可互换且它们不兼容。
答案 1 :(得分:2)
在Java数组中,对象是使用new
运算符创建的。您的方法需要Double[]
类型的对象,并且您正在传递double[]
类型的对象。
你期望java应该执行自动装箱/拆箱,但这种情况发生在原始类型和它们的包装类之间,而不是数组,因为它们本身就是对象。
参考:JLS: Arrays
答案 2 :(得分:1)
自动装箱仅适用于基本类型(double
- > Double
)。 double[]
和Double[]
是数组,每个数组都有不同的类型,Java不会自动对其进行打包/取消包装。
答案 3 :(得分:0)
就像其他人所说的那样,自动装箱并不适用于阵列。
但是在你的例子中,你可以用这种方式初始化我们的双数组。
Double[] array = new Double[]{1.0,2.0,3.0,4.0,5.0,6.0,7.0};