(Java)关于内存分配的理解
程序员文章站
2022-06-01 11:54:58
...
(1)栈内存空间:保存所有的对象名称(更准确地说是保存了引用的堆内存空间的地址)
(2)堆内存空间:保存每个对象的具体属性内容。
(3)全局数据区:保存static 类型的属性
(4)全局代码区:保存所有的方法定义
拿数组操作来说,在栈内存中保存的永远是数组的名称,只开辟了栈内存空间的数组是永远无法使用的,必须有指向的堆内存才可以使用,要想开辟新的堆内存就必须使用new关键字。
这也就解释了为什么对于数组的声明都要写上一个“null”?
int score[] = null;
score = new int[3]
// 或者:int score[] = new int[3];
因为数组属于引用数据类型,对于引用数据类型来说,其默认值就是null,表示暂时没有指向任何的内存空间
比如:
这里一个数组在开辟了堆内存之后,将在堆内存中保存数据,并将堆内存的操作地址给了数组名称score
此时也只是将堆内存的使用权交给了对应的栈内存空间,而一个堆内存空间可以被多个栈内存空间指向
比如一个人可以有多个名字,人就相当于堆内存,名字就相当于栈内存