[英]Arrays in Java and how they are stored in memory
我正在尝试理解java中的数组设置。 在创建数组后,为什么必须为数组中的每个对象初始化空间。 它是如何存储在内存中的:
[object][object]
或者像这样:
[*class]->[object]
[*class]->[object]
换句话说,实际上在内存中做了什么。 array[0] = new class()
只是返回对内存中保留位置的引用,而class[] array = new class[10]
语句创建了10个指针的行,这些指针稍后被分配给新陈述?
Java中的数组存储两种内容之一:原始值( int
, char
,...)或引用(也称为指针)。
因此, new Integer[10]
仅为10个Integer
引用创建空间。 它不创造10个Integer
对象(甚至10个自由空间Integer
对象)。
顺便提一下,这与字段,变量和方法/构造函数参数的工作方式完全相同:它们也只存储原始值或引用。
如果您熟悉C / C ++, 您可以将Java对象引用视为对象 (或指向结构的指针)的指针。 所以:
Person p = new Person();
p.setName("Helios");
是:
所以当你这样做时:
Person[] ps = new Person[5];
你保留了一个由5个引用到Person的数组 。 接下来,您将必须创建每个真人,并将每个引用分配给数组中的某个位置。
编辑:以前代码的(几乎)C / C ++版本
class Person { ... };
typedef PersonStruct* Person; // I don't remember if this declaration is ok
Person p = new PersonStruct();
p -> setName(...);
Person[] ps = new Person[5];
// ps is a variable in the stack pointing to the array in the heap
// (being the array five references to the PersoStruct)
而且你可以做到
ps[3] = p;
数组是连续的内存空间,所以它们看起来更像是你的第一个草图:
[object-reference][object-reference]
array[0] = new class()
将在array[0]
存储对新创建对象的引用。
class[] array = new class[10]
将创建一个包含十个空槽(或十个空引用)的数组。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.