1、数组的动态初始化
int buffer[] = new int[5] //动态初始化
我们知道,java里面凡是通过new
关键字开辟的空间都是在堆区,下面我们简单的画一下它的内存分布
首先,当程序执行到数组的定义部分时,buffer会入栈,然后通过new关键字在堆区开辟5个连续的空间,buffer则会指向堆区中数组的地址,在c语言中,这种称之为引用传递。
2、数组的静态初始化
int buffer[] = {1,2,3,4,5};
与动态初始化类似,同样是栈中的变量指向了堆区中数组的地址
3、二者的区别
-
相同点:
- 一旦初始化就不能再改变长度,如果一定要改变,只能重新初始化
- 内存的分布相同,虽然静态没有使用new关键字,但实则它也是在堆区开辟内存的
- 在声明了数组变量但没有初始化的时候,它们都不能在初始化的时候进行赋值
-
不同点:
- 静态初始化在初始化时由程序员显示指定每个数组元素的初始值,由系统决定数组的长度。
- 动态初始化:就是在初始化的时候指定数组长度(这时已经分配内存)。