为什么Java不初始化数组对象?

时间:2012-07-21 04:12:02

标签: java arrays

如果在java中运行以下代码:

public class Testing {

    public static void main(String[] args) {
        TestObject[] array = new TestObject[4];
        //array[0] = new TestObject();
        System.out.println(Arrays.asList(array));
    }
}

class TestObject {
    String aString;

    public TestObject() {
        aString = "This has been initialized.";
    }
}

它将打印(null,null,null,null),如果取消注释array[0] = new TestObject();,则第一个对象将具有内存地址(而不是null)。我只是很困惑,为什么当数组首次正确初始化时,Java不会自动为数组中的每个Object调用构造函数。它现在的工作方式有什么优势?这是一个空间问题(因为这样做太昂贵了吗?)

也许我只是忽略了一些愚蠢的事情,或者我只是错了。这与我遇到的问题没有直接关系,所以如果这是错误的论坛,我道歉。

2 个答案:

答案 0 :(得分:6)

如果要使用作为TestObject子类的实际对象填充数组,或者使用非默认构造函数构造,会发生什么?在现实世界中,你很少想要一个包含大量相同对象的数组。

答案 1 :(得分:0)

使用new TestObject[4]创建一个数组,可以容纳4个TestObject引用。 因此,请了解TestObject[]TestObject

之间的区别

TestObject[]TestObject - 对象的参考商店。如果您创建List<TestObject>,则必须使用引用填充列表。