java数组的内存结构
我们以代码为例说明:
一 静态初始化数组
int[] arr = new int[]{1, 2, 3};
执行这段代码,首先在栈中加载局部变量arr,然后在堆中开辟一段连续的3个元素的空间,这块空间第一个元素会有一个16进制的首地址值,然后将首地址值赋给局部变量arr(其实这也是一种简单的指针),从而建立局部变量和堆空间的联系。一开始每个元素都是默认值0,然后再赋成1、2、3。
二 动态初始化数组
String[] arr1 = new String[4];
arr1[0] = "Dane";
arr1[1] = "Dehaan";
arr1 = new String[3];
执行这段代码,仍然首先在栈中加载局部变量arr1,后面都一样,注意默认值为null,然后再显式地给arr1[0]和arr[1]赋值。
最后这句代码如何执行呢?只要出现new,就在堆内存开辟空间,仍然得到首地址值,把这个值赋给arr1。
思考,此时输出arr1[1]结果应当为?
答案是null
浙公网安备 33010602011771号