喜欢
public static student[] arr = new student[10];
现在,student是一个包含一些实例变量name(String)
和age(int)
的类。
我想知道一旦这条线被执行会发生什么?
所有十个引用都会得到内存还是我必须单独分配它们?如果尝试访问student[5].age
会怎样?
我需要知道内存分配状态..谢谢...............
答案 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)
创建对象数组时,只会创建参考变量。在你的案例中,学生班的参考变量。
在下图中,创建了一组参考变量。然后你可以 稍后将这些引用变量指向实际对象。
答案 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
以外的任何其他值,则必须单独执行此操作。