为什么我们在java中有空数组声明

时间:2016-01-16 17:09:14

标签: java arrays syntax declaration

int[] numbers;

在没有初始化的情况下,如上所述声明后,我无法使用数字数组。 完成了使用它的所有步骤。试图分配值,使用填充和尝试的长度,并得出结论,这是一种错误的方式来声明一个数组,但我不明白为什么Java有这样的语法。这令人困惑。

2 个答案:

答案 0 :(得分:2)

您只是定义了对数组的引用,但在您声明它之前,此引用不引用任何内容。对于它,您需要构造一个数组,唯一的方法是使用new并将这个新分配的对象链接到引用。它在Java中非常一致,因为您了解对象是什么以及它们是如何构建的。

int []ref_array;         // this is NOT an array, but a reference to an array, actually refers nothing
ref_array = new int[10]; // new construct a object that contains 10 ints and array refers to it.
ref_array[3];            // means get the object that ref_array refers, get the array inside and take the 4th value stored in it. A handy shortcut...

答案 1 :(得分:1)

为什么呢?因为有时您需要根据条件运行时信息初始化数组:

void syntheticExample(int[] these, int[] those, int[] theOthers) {
    int[] numbers;

    // ...some work...

    if (/*...some condition...*/) {
        numbers = these;
    } else {
        // ...more work, then:
        if (/*...some other condition...*/) {
            numbers = those;
        } else if (/*...some further condition...*/) {
            numbers = theOthers;
        } else {
            // We'll use our own numbers
            numbers = new int[] {1, 2, 3};
        }
    }

    // ...use `numbers`...
}

它与我们可以声明任何其他类型的变量而不初始化它的原因相同。声明和初始化/赋值是不同的东西,有时它们需要在不同的时间发生。

Jean-Baptiste's distinction在这里很有用和重要:上面的numbers是一个变量,它包含一个对象引用。 引用的内容是一个数组(如果我们为其分配null,则没有任何内容)。