Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/385.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么';Java初始化数组对象吗?_Java_Arrays - Fatal编程技术网

为什么';Java初始化数组对象吗?

为什么';Java初始化数组对象吗?,java,arrays,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 {

如果在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]=newtestobject()未注释,则第一个对象将具有内存地址(且不为空)。我只是不明白为什么Java在数组首次正确初始化时不会自动调用数组中每个对象的构造函数。目前的工作方式有哪些优点?这是否是一个空间问题(因为这样做成本太高)


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

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

使用
新建TestObject[4]
创建一个数组,其中可以包含对
TestObject
的4个引用。 因此,请理解
TestObject[]
TestObject
之间的区别:


TestObject[]
TestObject
-对象的参考存储。如果您创建一个
列表
您也必须用引用来填充列表。

如果您想用TestObject的子类或非默认构造函数构造的真实对象填充数组,会发生什么?在现实世界中,你很少需要一个包含一串相同对象的数组。它会初始化它们。。。仅设置为该类型的默认值。如果使用子类型或非默认构造函数,否则很快就会失败。@AmirAfghani,如果您想要10个空字符串。。由于列表的大小[通常]是可以改变的,所以通常不会向其中添加“空值”。。(在大多数情况下,列表中缺少项目可以表示这一点)。在任何情况下,都有各种
Array.fill
方法。我认为@AmirAfghani的观点是,用一堆相同的对象填充任何集合类几乎从来都不是你想要的。为什么要创建要立即替换的对象(和GC)?或者构造函数可能是私有的,或者可能没有默认构造函数,或者……此外,并非所有对象都有“默认构造函数”