数组,是一种存储多个数据的数据结构,可以理解成一个容器,这些存储的值在内存中是连续存放的,我们可以通过下标(即索引)来查询或者修改数据。在Java里面,一个数组只能存放一种类型的数据(即使是在后面的学习中存放了有继承关系的不同类型的对象,数组的类型也是同一类,只不过是父类的类型);在Java中,数组长度是不可变的。特别的,数组本身就是一种引用数据类型的数据。
定义数组:
类型[] 数组名; (推荐)
类型 数组名[];
一般推荐使用第一种,因为第一种 类型[] 是类型名,而第二种类型 是一种类型名,而 数组名[] 变成了数组名,例如:
int[] num;和int num[];两种,后者很容易让人误解为数据类型是int型的。
数组的初始化:
//定义数组
int[] arr;
//静态初始化
arr = new int[]{1,2,3,4,5};
//简化的静态初始化
arr = {1,2,3,4,5};
//动态初始化
int len = 5;//len代表数组长度
arr = new int[len];//输出[0,0,0,0,0]
注意的一点,动态初始化的时候,系统再到会给数组项一个初始化的值,根据数据类型不同:
byte short int long 0
float double 0.0
boolean false
char '\U0000'
引用数据类型 null
所以上面代码我们没有赋值,都是由初始值的。
使用数组:
int[] arr = new int[5];
//赋值,注意索引要小于长度,不然会引发异常
arr[2] = 15;
//访问
int num = arr[2];
//for循环遍历
for(int i=0;i<arr.length;i++){
System.out.println(arr[i]);
}
//foreach循环遍历
for(int x : arr){
System.out.println(x);
}
数组的内存存放:
在数组中,存放的其实是里面元素的地址,通过这个地址可以找到这个元素,这就相当于统计的家庭地址一样,通过家庭地址可以找到家。
根据上图就可以很好的理解这一点数组arr存放的是元素e1的地址,e1、e2以及后面的元素是连续存放的,因为是同一种数据格式,e1、e2这些的空间就可以通过下标很好的推算出来,举个例子:
上面的图,小明距离讲台0.5米,而每张桌子之间0.5米,那么小红、小丽她们距离讲台的距离也就可以知道了。