数组是相同类型数据的有序集合,可以理解为是一个数据容器。
数组的特点
- 其长度是确定的。数组一旦被创建,它的大小就是不可以改变的。
- 其元素必须是相同类型,不允许出现混合类型。
- 数组中的元素可以是任何数据类型,包括基本类型和引用类型。
- 数组变量属引用类型,数组也可以看成是对象,数组中的每个元素相当于该对象的成员变量。数组本身就是对象,Java中对象是在堆中的,因此数组无论保存原始类型还是其他对象类型,数组对象本身是在堆中的。
数组的初始化
声明
一维数组的声明方式有两种
数据类型[] 数组名;(推荐使用这中方式)
数据类型 数组名[];
注意 :
1.声明的时候并没有实例化任何对象,只有在实例化数组对象时,JVM才分配空间,这时才与长度有关。因此,声明数组时不能指定其长度(数组中元素的个数),例如: int a[5]; //非法
2.声明一个数组的时候并没有数组被真正的创建。
3.构造一个数组,必须指定长度。
初始化
由于数组是引用数据类型,所以数组变量中只能够存放null或者引用(地址),要想给数组进行初始化就必须分配堆区地址给数组变量。
初始化的方式有以下两种:
动态初始化
数组在初始化的时候必须指定数组的长度,数组中的每一个元素由系统赋值,赋值的规则如下所示:
byte short int long 默认值 0
float double 默认值 0.0
char 默认值 ‘\u0000’ 就是一个空字符
boolean 默认值 false
引用类型 默认值 null
格式:
数据类型[] 数组名 = new 数据类型[数组的长度];
数组在动态初始化的时候,系统会根据数组的长度动态分配连续的内存空间,并且会根据堆区默认值的特点给每一个数组元素赋值。
静态初始化
数组在初始化的时候,系统会根据指定元素的个数动态计算数组的长度,并且会根据用户指定的数值一一赋值给数组的每一个元素。
格式一: 数据类型[] 数组名 = new 数据类型[]{元素1,元素2,元素3,…};
格式二: 数据类型[] 数组名 = {元素1,元素2,元素3,…};
数组的拷贝
利用System.arrayCopy或者Arrays.copyOf方法。
System.arraycopy: 数组元素的拷贝,这是一个本地方法,不是Java实现的,是C实现的.
该方法有以下几个参数:
src: 源数组
srcPos: 源数组的开始索引
dest: 目标数组
destPos: 目标数组的开始索引
Length: 拷贝元素的个数
Arrays.copyOf(): 表示拷贝数组,可以实现元素的拷贝,还能够动态扩容和缩容,集合底层依赖这个方法,这个方法依赖System.arraycopy()
Arrays.copyOfRange: 表示拷贝数组一部分