1、栈主要存储的是局部变量,局部变量即定义在方法声明上和方法中的变量。
2、堆主要存储的是new出来的对象和数组。
以下面的代码进行分析:
public static void main(String args [])
{
//数据类型 [] 数组名 = new 数据类型 [ 数组长度]
int [] arr=new int [3];//假设系统给数组分配的地址为0x0000
}
1、main函数是一个方法所以是以栈的形式进行存储,而且当运行时首先调用的是main方法,所以main方法压入栈底,如何在main函数中再调用其他函数,将函数依次压栈。
2、而arr是定义在main方法里面的一个局部变量所以是保存在main方法的栈里面
3、而 int [3]是new实现的,所以保存在堆里面,假设地址为0x0011,其索引分别为0,1,2,而数组在声明之后系统会给int型的数组默认赋初值为0;
4、系统将堆内数组的地址赋值给arr,这样arr就可以通过地址值找到整个实体,然后通过数组索引找到对应的数据。