Java虚拟机的内存划分
为了提高运算效率,就对空间进行了不同区域的划分,因为每一片区域都有特定的处理数据方式和内存管理方式。
数组在内存中的存储
public static void main(String[] args) { int[] arr = new int[3]; System.out.println(arr);//[I@5f150435 }
以上方法执行,输出的结果是[I@5f150435,这个是什么呢?是数组在内存中的地址。new出来的内容,都是在堆
内存中存储的,而方法中的变量arr保存的是数组的地址。
数组中空指针异常
public static void main(String[] args) { int[] arr = {1,2,3}; arr = null; System.out.println(arr[0]); }
arr = null 这行代码,意味着变量arr将不会在保存数组的内存地址,也就不允许再操作数组了,因此运行的时候会抛出 NullPointerException 空指针异常。在开发中,数组的越界异常是不能出现的,一旦出现了,就必须要修
改我们编写的代码。
空指针异常在内存图中的表现