为什么';Java初始化数组对象吗?
如果在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 {
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)?或者构造函数可能是私有的,或者可能没有默认构造函数,或者……此外,并非所有对象都有“默认构造函数”