为什么我不能将double []传递给Double []

时间:2018-01-27 06:18:04

标签: java

我有这个片段:

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[]作为参数

的方法

4 个答案:

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