1.什么是数组
Array:多个相同类型数据按一定顺序排列的集合,并使用一个名字命名,通过编号的方式对这些数据进行统一管理。
(1)说明
① 数组本身是引用数据类型,数组中的元素可以是任何数据类型,包括基本数据类型和引用数据类型。
② 创建数据对象会在内存中开辟一整块连续的空间,而数组名中引用的是这块连续空间的首地址。
③ 数组的长度一旦确定,就不能修改。
可以通过下标的方式调用指定位置的元素,从0开始。
④ 数组分类:一维、二维、三维...;基本数据类型数组、引用数据类型数组。
2.一维数组
(1)声明
int a[];
int[] a1;
double b[];
String[] c;
int a[5]; //×错误的,声明时不能指定长度
(2)初始化
① 静态初始化
定义时就为数组元素分配空间并赋值
int arr[] = new int[]{3,9,8};
//或
int[] arr = {3,9,8};
String names[] = {"张三","李四","王五"};
② 动态初始化
声明数组且为数组元素分配空间与赋值的操作分开进行
int[] arr = new int[3];
arr[0] = 3;
arr[1] = 9;
arr[2] = 8;
(3)数组默认值
通过下标arr[2]
来引用数组元素,下标从0开始,数组长度为n,下标可以取值 0~n-1,arr.length
属性表示数组长度。
int a[] = new int[5];
String names[] = new String[3];
System.out.println(a[2]); //0
System.out.println(names[2]); //null
//通过length属性遍历数组
for (int i = 0; i < names.length; i++) {
System.out.println(names[i]);
}
数组元素类型 | 元素默认初始值 |
---|---|
byte | 0 |
short | 0 |
int | 0 |
long | 0L |
float | 0.0F |
double | 0.0 |
char | 0或写为'\u0000'(表现为空) |
boolean | false |
引用类型 | null |
3.内存解析
int[] arr = new int[]{1,2,3};
String[] names = new String[4];
names[1] = "张三";
names[2] = "李四";
names = new String[3];
System.out.println(names[1]); //null
(1)首先执行int[] arr = new int[]{1,2,3};
在栈内存中变量arr地址指向堆内存中的地址,默认值为0,然后赋值为1,2,3
(2)执行
String[] names = new String[4];
names[1] = "张三";
names[2] = "李四";
栈内存中新增变量names地址指向堆内存中的地址,引用类型默认赋值为null,然后执行赋值操作。
(3)执行names = new String[3];
执行new操作在堆内存中开辟新的连续地址,默认值为null,names指向新的地址,原来的引用失效。