2

喜欢

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

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

4

5 回答 5

3

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

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

于 2013-10-16T10:04:30.730 回答
2

是的

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;
于 2013-10-16T09:56:15.347 回答
2

当您创建对象数组时,只会创建引用变量。在您的情况下,学生类的参考变量。

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

狗对象数组

于 2013-10-16T10:06:36.273 回答
1

public static student[] arr = new student[10];将为 10 个学生分配内存。这些内存被空填充。

所以在这里你不能访问student[5].age,因为对实际对象的引用不存在。

我们需要单独创建对象引用,如下所示

 for(int i=0;i<10;i++){
   student[i]= new Student();
 } 

如果您在创建实际对象引用之前访问 student[5].age,您将以 NullPointerException 结束。

于 2013-10-16T10:00:48.540 回答
0

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

您将获得十个参考文献的空间。这些引用将被初始化为null. 如果您希望它们设置为 以外的任何值null,则必须单独进行。

于 2013-10-16T09:57:01.533 回答