[英]what exactly happens when new operator is called for array and object?
我可能错了,但是从我在java中创建对象时的理解:
Class object = new Class;
new Class
创建Class类型的新对象,然后应用于"object"
引用
所以当你通过以下方式创建对象数组时:
Class[] objects = new Class[10];
是否意味着new Class[10]
创建了10个Class类型的对象,然后将其应用于objects
引用,或者仅保留10个Class类型的对象的内存,并且您需要稍后创建某些对象
稍后是正确的new Class[10]
将为内存中的10个对象创建占位符,您需要在其中显式放置对象。
new Class[10]
确实为10个占位符创建了内存。 它不为单个条目分配内存。
考虑以下示例:bool [] booleanArray; FileInfo []文件;
booleanArray = new bool[10];
files = new FileInfo[10];
这里,booleanArray是值类型System.Boolean的数组,而files数组是引用类型System.IO.FileInfo的数组。 下图显示了执行这四行代码后CLR管理的堆的描述。
尽管这是一个C#的例子。 这与我们在Java中的类似。
对象将是指向指针数组的指针。 这些指针将指向Class类型的对象。 除了实际的指针之外,没有为任何人分配内存。 所以新的Class [10]会创建10个指针,这些指针由对象引用。
创建一个对象数组类似于创建变量,即代码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()一样使用它们,它将显示空指针异常。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.