创建OBJECT数组时如何分配内存(堆栈和堆引用)?

时间:2013-10-16 09:53:59

标签: java

喜欢

public static student[] arr = new student[10];

现在,student是一个包含一些实例变量name(String)age(int)的类。 我想知道一旦这条线被执行会发生什么? 所有十个引用都会得到内存还是我必须单独分配它们?如果尝试访问student[5].age会怎样? 我需要知道内存分配状态..谢谢...............

5 个答案:

答案 0 :(得分:3)

执行上述语句时,JVM将创建10个连续的内存位置,每个位置都足以保存对student的引用。但是,如果您愿意,此数组将不包含引用或null。执行arr[0] = new student();之类的语句时,将在堆上创建student对象,其引用将保存在arr[0]中。请记住,数组也在堆上分配。

因此,一旦你创建了10个student个对象,每个对象都将分配到堆上的某个位置,但它们的引用将存储在arr

答案 1 :(得分:2)

public static student[] = new student[10];

只要该行执行,JVM就会为10名学生references分配内存。

official docs on Arrays开始,查看流程。

  // declares an array of integers
        int[] anArray;

        // allocates memory for 10 integers
        anArray = new int[10];

        // initialize first element
        anArray[0] = 100;

答案 2 :(得分:2)

创建对象数组时,只会创建参考变量。在你的案例中,学生班的参考变量。

在下图中,创建了一组参考变量。然后你可以 稍后将这些引用变量指向实际对象。

Dog object array

答案 3 :(得分:1)

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结束。

答案 4 :(得分:0)

  

所有十个引用都会获得内存,还是我必须单独分配?

您将获得十个参考的空间。这些引用将初始化为null。如果您希望将它们设置为null以外的任何其他值,则必须单独执行此操作。