
5.3 基本类型数组的初始化
在上一节我们学会了如何声明一个基本类型的数组,但是它现在还没有存放任何东西,还等着初始化,给它填充内容。现在就让我们一起来初始化它吧!
5.3.1 动态初始化
动态初始化指的是数组声明,且为数组元素分配空间与赋值的操作分开进行。初始化的时候使用关键字new。创建方式如下面的代码片段所示:

声明数组的时候在栈空间开辟了一块区域,用于存储引用值,那么当我们使用关键字new为数组分配元素空间的时候发生了什么事呢?其实当我们使用关键字new之后,Java虚拟机在内存中的堆空间开辟了一块区域,用于存放数组中的元素,声明数组的引用就指向这个堆空间,如图5.2所示。

图5.2 数组初始化后的内存示意图
5.3.2 静态初始化
静态初始化是在定义数组时常用的初始化方式,即在定义数组的同时,就为数组元素分配空间并赋值。一般包含两种方式:声明之后初始化和声明的同时完成初始化。下面介绍如何完成这两种初始化方式。
1. 声明之后初始化

2. 声明的同时初始化

这时候的内存分配与动态初始化方式不同的是:动态初始化数组元素的值是默认值(int就是0),而静态初始化在分配空间的同时,就已经为元素赋好了值,如图5.3所示。

图5.3 静态初始化数组的内存示意图
5.3.3 默认初始化
数组是引用类型,它的元素相当于类的成员变量,因此数组一经分配空间,其中的每个元素也会按照成员变量同样的方式被隐式初始化。
对于基本数据类型而言,默认初始化值各有不同:
● byte、short、int、long类型数组的元素的默认初始值是0。
● float、double类型数组的元素的默认初始值是0.0。
● char类型数组的元素的默认初始值是空格。
● boolean类型数组的元素的默认初始值是false。
对于引用数据类型而言,默认初始化值为null,如示例5-1所示。
【示例5-1】数组的默认初始化

程序编译后,运行结果如下:

通过示例5-1可以看出,在定义了数组之后,系统会给数组进行默认的赋值,如果不对数组的数值进行更改,那么在使用数组时会使用系统的默认数值。