9.6 实例化中的内存分配

大家还记得类是值类型还是引用类型吗?如果记不太清楚了,可以翻阅相关章节,温故而知新嘛!类是引用类型,我们知道,引用类型是在堆里分配内存的,在栈中保存的是对象的引用。因此,类的实例化涉及两个位置的内存分配。

❑在栈中为对象的引用分配空间;

❑在堆中为对象分配空间。

一起来看看下面代码中的内存是如何分配的:


Car car=new Car();


这行代码看似简单,实则不然,其过程大致可分为两个步骤:

(1)首先,声明类型为Car的变量car,并使用null初始化,此时会在栈中为car变量分配一个内存,它指向null,因为在堆中还没有创建一个car对象实例以供它指向;

(2)其次,使用new运算符在堆中创建一个新的Car实例对象,并将其引用赋予变量car,此时栈中的car变量指向新创建的实例对象(见图9-7)。

9.6 实例化中的内存分配 - 图1

图 9-7 实例化中的内存分配