在学习数组时接触到了堆和栈的概念,在说堆内存和栈内存之前我们先了解一下内存:
1.内存:内存是计算机中临时存储区域,作用是运行程序。我们编写好的代码是存在硬盘中的,想要让代码运行起来必须将代码放在内存中,Java虚拟机(JVM)想要运行程序(将.java文件转为.class文件)就必须对内存空间进行分配和管理。而java中的内存分为:寄存器,本地方法栈,方法区,堆内存,方法栈五个部分。
2.Java在运行代码时,栈内存:里面存储的数据只有在程序调用时才存在,调用结束后内存释放。
堆内存:里面存储的数据从定义开始就存在,无论是否调用它一直存在。
2.数组与堆栈:
public class array{
public static void main(String[] args){
int[] arr = new int[1];
arr[0] = 1;
System.out.println(arr);
System.out.println(arr[0]);
}
}
在上面程序开始执行时:
1.我们首先定义整形数组arr: int[] arr此时进入栈内存中,
2.为数组开辟的新空间:new int[1]此时进入堆内存便拥有一个数组元素arr[0],
3.通过赋值语句"="将堆内存数组的地址赋值给栈内存
4.arr[0]=1;将1赋值给堆内存中的第一个数组元素。
输出结果如下:
此时第一个输出的是数组在堆内存中的地址,第二个输出的是堆内存中的数组元素。



