3

如果在 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不会自动调用数组中每个对象的构造函数感到困惑。它现在的工作方式有什么优势?这是空间问题(因为这样做成本太高)?

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

4

2 回答 2

6

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

于 2012-07-21T04:16:25.170 回答
0

随着new TestObject[4]您创建一个数组,它可以容纳 4 个对TestObject. TestObject[]所以了解和之间的区别TestObject

TestObject[]TestObject- 对象的参考存储。如果您创建一个List<TestObject>,您也必须在列表中填写参考。

于 2012-07-23T11:15:19.233 回答