![Java编程从零开始学(视频教学版)](https://wfqqreader-1252317822.image.myqcloud.com/cover/137/29977137/b_29977137.jpg)
5.3 基本类型数组的初始化
在上一节我们学会了如何声明一个基本类型的数组,但是它现在还没有存放任何东西,还等着初始化,给它填充内容。现在就让我们一起来初始化它吧!
5.3.1 动态初始化
动态初始化指的是数组声明,且为数组元素分配空间与赋值的操作分开进行。初始化的时候使用关键字new。创建方式如下面的代码片段所示:
![](https://epubservercos.yuewen.com/96FD95/16499866704817306/epubprivate/OEBPS/Images/Figure-P75_51847.jpg?sign=1738962096-5vh9amp4rijlK9pQsJe1XuLO2wvo7VP0-0-43d116a555353f60905e433d3dfbde34)
声明数组的时候在栈空间开辟了一块区域,用于存储引用值,那么当我们使用关键字new为数组分配元素空间的时候发生了什么事呢?其实当我们使用关键字new之后,Java虚拟机在内存中的堆空间开辟了一块区域,用于存放数组中的元素,声明数组的引用就指向这个堆空间,如图5.2所示。
![](https://epubservercos.yuewen.com/96FD95/16499866704817306/epubprivate/OEBPS/Images/Figure-P75_9056.jpg?sign=1738962096-mwLQuTKK8L64BrcXhktNgL2gIKzcBnsf-0-a5abfa4feca4ea5e29884d5bb84eb2ad)
图5.2 数组初始化后的内存示意图
5.3.2 静态初始化
静态初始化是在定义数组时常用的初始化方式,即在定义数组的同时,就为数组元素分配空间并赋值。一般包含两种方式:声明之后初始化和声明的同时完成初始化。下面介绍如何完成这两种初始化方式。
1. 声明之后初始化
![](https://epubservercos.yuewen.com/96FD95/16499866704817306/epubprivate/OEBPS/Images/Figure-P76_51848.jpg?sign=1738962096-7tdmy9ImaFA0IzAZszhCQsgbYeLB534v-0-f7c8b844718eee6f5d0e98b86caf764d)
2. 声明的同时初始化
![](https://epubservercos.yuewen.com/96FD95/16499866704817306/epubprivate/OEBPS/Images/Figure-P76_51849.jpg?sign=1738962096-QcdT4ObhcepeqfyMmmToGSf1jpUZj2oI-0-d643ed5c11793c8cec132599e1763fdb)
这时候的内存分配与动态初始化方式不同的是:动态初始化数组元素的值是默认值(int就是0),而静态初始化在分配空间的同时,就已经为元素赋好了值,如图5.3所示。
![](https://epubservercos.yuewen.com/96FD95/16499866704817306/epubprivate/OEBPS/Images/Figure-P76_9155.jpg?sign=1738962096-cX2TTXADDRbylND2MXEI5eqxS2Puu8s5-0-13a20886c9feb9a70a7d7625579e18e8)
图5.3 静态初始化数组的内存示意图
5.3.3 默认初始化
数组是引用类型,它的元素相当于类的成员变量,因此数组一经分配空间,其中的每个元素也会按照成员变量同样的方式被隐式初始化。
对于基本数据类型而言,默认初始化值各有不同:
● byte、short、int、long类型数组的元素的默认初始值是0。
● float、double类型数组的元素的默认初始值是0.0。
● char类型数组的元素的默认初始值是空格。
● boolean类型数组的元素的默认初始值是false。
对于引用数据类型而言,默认初始化值为null,如示例5-1所示。
【示例5-1】数组的默认初始化
![](https://epubservercos.yuewen.com/96FD95/16499866704817306/epubprivate/OEBPS/Images/Figure-P77_51853.jpg?sign=1738962096-NfYVSnFP95HVnwqnbpwFb0POpPxG9ZVP-0-9e4338cf2a2063ec37b2d3fa85e374a6)
程序编译后,运行结果如下:
![](https://epubservercos.yuewen.com/96FD95/16499866704817306/epubprivate/OEBPS/Images/Figure-P77_51854.jpg?sign=1738962096-kmFnxGYp4OuxuG0o56Br5kENJ4uuaHPj-0-2358974d7ad04e14f2290f3330a3ce3f)
通过示例5-1可以看出,在定义了数组之后,系统会给数组进行默认的赋值,如果不对数组的数值进行更改,那么在使用数组时会使用系统的默认数值。