![](/img/trans.png)
[英]In Java, How much memory is allocated on stack and heap for “new Object()”
[英]How is the memory allocated(stack and heap reference) when an OBJECT array is created?
喜欢
public static student[] arr = new student[10];
现在,student是一个具有一些实例变量name(String)
和age(int)
。 我想知道一旦这条线被执行会发生什么? 所有十个引用都会得到内存还是我必须单独分配它们? 如果试图访问student[5].age
怎么student[5].age
? 我需要知道内存分配状态..谢谢...............
执行上述语句时,JVM将创建10个连续的内存位置,每个位置足以容纳对student
引用。 但是,如果您愿意,此数组将不包含任何引用或null
。 当你执行像arr[0] = new student();
语句时arr[0] = new student();
将在堆上创建一个student
对象,其引用将保存在arr[0]
。 请记住,数组也在堆上分配。
因此,一旦你创建了10个student
对象,每个对象将被分配到堆上的某个地方,但它们的引用将存储在arr
是
public static student[] = new student[10];
一旦该行执行, JVM
为10个学生references
分配内存。
从Arrays的官方文档中 ,看一下流程。
// declares an array of integers
int[] anArray;
// allocates memory for 10 integers
anArray = new int[10];
// initialize first element
anArray[0] = 100;
创建对象数组时, 只会创建引用变量 。 在您的情况下,学生类的参考变量。
在下图中,创建了一组参考变量。 然后,您可以稍后将这些引用变量指向实际对象。
public static student[] arr = new student[10];
将为10名学生分配记忆。 这些内存填充为null。
所以在这里你无法访问student[5].age
因为对实际对象的引用不存在。
我们需要像下面一样单独创建Object引用
for(int i=0;i<10;i++){
student[i]= new Student();
}
如果您在创建实际对象引用之前访问student [5] .age,则将以NullPointerException结束。
所有十个引用都会得到内存还是我必须单独分配?
您将获得十个参考空间。 这些引用将初始化为null
。 如果您希望将它们设置为null
以外的任何null
,则必须单独执行此操作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.