多个相同类型数据按一定顺序排列的集合,这个集合具有统一的命名,并通过下标对这些数据进行编号管理
数组的特点
-
数组本身是引用类型,详细描述查看:数据类型-引用数据类型
-
创建数组对象会在内存中开辟一段连续的空间,而数组名所指代的引用值,就是该连续空间的首地址。
-
数组的长度一旦确定,就无法修改
-
我们可以通过下标的方式调用指定位置的元素,通过指针的移动来遍历,速度很快
-
数组的下标从0开始,长度为n的数组,合法下标取值范围:0→n-1
-
数组内的元素会根据其本身的数据类型进行默认初始化
一维数组
声明方式:
数据类型 数组名[]
或数据类型[] 数组名
初始化方式:
动态初始化:分配空间和赋值操作分开进行
int[] i=new int[2]
或int i[]=new int[2]
静态初始化:在定义数组的同时就赋值
int i[]=new int[]{1,2,3}
或int i={1,2,3}
public class Test{
public static void main(String args[]){
int[] s;
s = new int[10];
for ( int i=0; i<10; i++ ) {
s[i] =2*i+1;
System.out.println(s[i]);
}
}
}
当数组中存储的是原生类型时的内存解析:
当数组中存储的是引用类型时的内存解析:
当数组引用和实际数组断开引用关系,实际数组的长度依旧不变,但是变成了无效数组(垃圾),只能等待垃圾回收器进行回收
多维数组
多维数组的声明方式和一维数组的声明方式相似,几维就有几个[]
多维数组就是多个一维数组的套娃,每个一维数组的长度可以不同。因此在Java底层机制上来说,没有多维数组的概念。
声明方式:这里以二维数组举例
int[][] i
或int i[][]
动态初始化1:
int[][] arr = new int[3][2]
表达的意思:该二维数组中有三个组件(一维数组),每个一维数组中有两个元素
给第一个组件中的第一个元素赋值:arr[0][0]=23
动态初始化2:
int[][] arr=new int[3][]
表达的意思:该二维数组中有三个组件(一维数组),每个一维数组只是声明了,没有初始化(会默认初始化为null)
分别给三个组件进行初始化:
arr[0]=new int[3];arr[1]=new int[1];arr[2]=new int[2];
静态初始化
int[][] arr = new int[][]{{3,8,2},{2,7},{9,0,1,6}};
注意特殊写法情况:int[] x,y[]; x是一维数组,y是二维数组
这种定义是允许的,这样定义的i没有进行初始化,j初始化了int[] i,j[]=new int[2][3];
增强工具类Arrays
具体说明查看:Arrays类–待增加