当为数组和对象调用new运算符时到底发生了什么?

时间:2014-05-16 17:48:09

标签: java arrays

我可能错了,但是从我在java中创建对象时的理解是:

Class object = new Class;

new Class创建Class类型的新对象,然后将其应用于"object"引用

所以当你通过以下方式创建对象数组时:

Class[] objects = new Class[10];

是否意味着new Class[10]创建10个Class类型的对象,然后将其应用于objects引用,或者仅保留10个Class类型对象的内存,您需要稍后创建某些对象

5 个答案:

答案 0 :(得分:1)

稍后是正确的new Class[10]将为内存中的10个对象创建一个占位符,您需要将对象明确地放在其中。

答案 1 :(得分:0)

new Class[10]确实为10个占位符创建内存。它不会为单个条目分配内存。

答案 2 :(得分:0)

考虑以下示例:     bool [] booleanArray;     FileInfo []文件;

booleanArray = new bool[10];
files = new FileInfo[10];

这里,booleanArray是值类型System.Boolean的数组,而files数组是引用类型System.IO.FileInfo的数组。下图显示了执行这四行代码后CLR托管堆的描述。

enter image description here

尽管这是一个C#示例。这与我们在Java中的相似。

答案 3 :(得分:0)

对象将是指向指针数组的指针。这些指针将指向Class类型的对象。除了实际的指针之外,没有为任何人分配内存。所以 new Class [10] 会创建10个指针,由对象引用。

答案 4 :(得分:0)

创建对象数组类似于创建变量,即代码 Class[] objects = new Class[10];可以解释为

Class object1;
Class object2;
...

使用它们或调用函数和访问变量我们必须调用构造函数,即。

object1 = new Class();
object2 = new Class();

因此Class[] objects = new Class[10];创建了10个Class引用,并且没有为对象进行内存分配。为此,我们必须为它们调用构造函数,如object[0] = new Class(); 现在已创建对象已分配内存,我们可以使用它们。 另外,如果在创建没有调用构造函数的对象数组之后,我们就像对象[0] .somefunction()一样使用它们,它将显示空指针异常。