繁体   English   中英

创建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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM